« 2013年9月 | トップページ | 2013年11月 »

2013年10月

2013年10月26日 (土)

【Tizen】ウェブサイトのリンクから、Nativeアプリを起動する

以前、ウェブサイトのリンクからウェブアプリを起動する方法は書きましたが、

今回はネイティブアプリを起動する方法について記載します。


●ウェブサイト側の実装

ウェブサイト側は、以下のリンクを用意するとします。

<a>タグのhref属性に、"test"というスキームを指定しました。

<a href="test://" />


●アプリ側の実装

上記のウェブサイトのリンクから、ネイティブアプリを起動するには、

manifest.xmlに、次のように記載します。

追記するのは、赤字の部分です。

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<Manifest xmlns="http://schemas.tizen.org/2012/12/manifest">
    <Id>nwpCg1lLaR</Id>
    <Version>2.0.0</Version>
    <InstallLocation>Internal</InstallLocation>
    <Type>C++App</Type>
    <Requirements>
        <Feature Name="http://tizen.org/feature/screen.size.normal">true</Feature>
    </Requirements>
    <Apps>
        <ApiVersion>2.2</ApiVersion>
        <Privileges>
            <Privilege>http://tizen.org/privilege/application.launch</Privilege>
        </Privileges>
        <UiApp HwAcceleration="On" LaunchingHistoryVisible="False" Main="True" MenuIconVisible="True" Name="NativeSample">
            <UiScalability BaseScreenSize="Normal" CoordinateSystem="Logical" LogicalCoordinate="720"/>
            <UiTheme SystemTheme="White"/>
            <DisplayNames>
                <DisplayName Locale="eng-GB">NativeSample</DisplayName>
            </DisplayNames>
            <Icons>
                <Icon Section="MainMenu" Type="Xhigh">mainmenu.png</Icon>
            </Icons>
            <AppControls>
                <AppControl>
                    <Operation>http://tizen.org/appcontrol/operation/view</Operation>
                    <Uri>test</Uri>
                </AppControl>
            </AppControls>

            <Permissions>
                <Permission Type="Signature"/>
            </Permissions>
        </UiApp>
    </Apps>
</Manifest>


<Uri>タグには、ウェブサイト側でリンク先に指定しているものと、

同じスキームを指定します。

これで、ウェブサイトのリンクからネイティブアプリが起動します。


なお、確認環境は、Tizen SDK2.2 エミュレータです。

2013年10月22日 (火)

【Android】Google Map API v2で、地図を拡大/指定位置の表示/傾ける/回転などを行う

先日、せっかくgoogle map API v2を使って地図を表示したので、

遊んでみたいと思います。


  

【GoogleMapオブジェクトを取得する】

何をするにもまず、GoogleMapオブジェクトを取得する必要があります。

GoogleMapオブジェクトは、次のようにして取得します。

public class MainActivity extends FragmentActivity  {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
       
        SupportMapFragment fragment
            = ((SupportMapFragment)getSupportFragmentManager().findFragmentById(R.id.map));
       
        GoogleMap map = fragment.getMap();

       
    }
}

マップオブジェクトが取得できたら、地図のズームや回転など、いろいろな操作をしてみましょう。


【地図の拡大/縮小を行う】

地図の拡大・縮小を行う方法は、以下の通り。

// 地図の倍率を指定する。
CameraUpdate update = CameraUpdateFactory.zoomBy(3);

// 倍率を地図に反映させる。
map.moveCamera(update);

なお、指定できる倍率の最大値及び最小値は、

map.getMaxZoomLevel() / map.getMinZoomLevel()

で、取得できます。


【指定した位置を地図で表示する】

指定した位置を、地図上で表示する場合は、次のように行います。

/*
*  表示位置を示すLatLngオブジェクトを生成。
*  第一引数が緯度、第二引数が軽度。
*/
LatLng lat = new LatLng(34.645947,135.514267);

// 地図の表示位置を指定する。
CameraUpdate update = CameraUpdateFactory.newLatLng(lat);

// 表示位置を地図に反映させる。
map.moveCamera(update);

ちなみに、上のサンプルソースで指定している座標は、

横浜ランドマークを超え、日本一高いビルとなったあべのハルカスの位置です。


【地図を傾ける】

Google Map API v2で表示した地図は、2点タッチしたまま上下にスライドすると、

地図の表示を傾けることができます。

これをソースで行う場合は、次のようになります。

// 傾きを指定する際は、CameraPositionを使用する必要がある。
CameraPosition.Builder builder = new CameraPosition.Builder(map.getCameraPosition());

// 地図の傾きを設定。大きければ大きいほど傾く。
builder.tilt(50);
CameraPosition position = builder.build();

// CameraPositionから、CameraUpdateを生成。
CameraUpdate update = CameraUpdateFactory.newCameraPosition(position);

// 傾きを地図に反映させる。
map.moveCamera(update);


【地図を回転させる】

Google Map API v2で表示した地図は、2点タッチしたまま回転させると、

地図を回転させることが出来ます。

この操作も、もちろんプログラムから行うことが出来ます。

これにより、地図をヘディングアップ表示させることも簡単に出来そうですね。

ソースは以下のとおりです。

// 地図を回転する際は、CameraPositionを使用する必要がある。
CameraPosition.Builder builder = new CameraPosition.Builder(map.getCameraPosition());

// 地図の回転角を設定。0~360で指定する。0で北を指す。
builder.bearing(90);
CameraPosition position = builder.build();

// CameraPositionから、CameraUpdateを生成。
CameraUpdate update = CameraUpdateFactory.newCameraPosition(position);

// 回転角を地図に反映させる。
map.moveCamera(update);


【倍率/指定位置の表示/傾き/回転を、一度に指定する】

ここまでで記載した、4つの操作を一度に行います。

1度に複数の設定を同時に行う場合は、CameraPosition.Builderを使用します。

CameraPosition.Builder builder = new CameraPosition.Builder(map.getCameraPosition());

// 地図の倍率を指定。
builder.zoom(17);

// 地図の表示位置を指定。
builder.target(new LatLng(34.645947,135.514267));

// 地図の傾きを指定。
builder.tilt(50);
// 地図の回転角を指定。
builder.bearing(90);

CameraPosition position = builder.build();

// CameraPositionから、CameraUpdateを生成。
CameraUpdate update = CameraUpdateFactory.newCameraPosition(position);

// 回転角を地図に反映させる。
map.moveCamera(update);


上記ソースの設定で地図を表示すると、下の画像のようになります。

Device20131022010551_2


立体的に表示されて、かなりカッコいい感じです。


--------------------------------------------------

自作アプリ、

いつでもクイックランチャー ver3.0アップデートを

公開しました!

Slidetask

Google playよりダウンロード可能ですので、是非お使いください!

https://play.google.com/store/apps/details?id=com.yso.slidetask


感想や改善点等、聞かせていただけるとうれしいです。

アプリの中の実装方法で気になる点のご質問も大歓迎です!

2013年10月20日 (日)

【Android】Google Map API v2を使用する

2013年3月18日以降、Google Map API v1用の新しいAPIキーを取得することが

出来なくなっています。

そのため、これ以降Google Mapを使用したアプリを作る際は、

必然的にv2のAPIを使うことになります。

しかし、APIキーの取得方法からアプリへの組み込み方まで、

v1のときとは大きく変わっているので、ここに手順を書き残します。


組み込みまでの手順はいろいろと面倒ではありますが、

v2のGoogle Mapは、v1のものに比べ、たくさんの機能が追加されており、

組み込む価値は十分にあると思います。


それでは、手順について書いていきたいと思います。


【① google play serviceのパッケージを取得する】

google map api v2は、google play serviceの1機能として用意されています。

Androidでgoogle map api v2を使用する際は、google play serviceのパッケージを

取得する必要があります。


ではまず、SDKマネージャーを起動しましょう。

11


SDKマネージャーが起動したら、"extras"内の"google play service"に

チェックを入れ、インストールボタンを押してください。

これで、パッケージの取得が始まります。

12


インストールしたパッケージは、以下のパスに保存されます。

"(自身のsdk保存場所)\extras\google\google_play_services"

中には、アプリ開発時に使用するライブラリの他、

ドキュメントやサンプルコードが入っています。


この中のライブラリを、eclipseに取り込みましょう。

eclipseにて、"新規プロジェクト"⇒"Android"⇒"Android Project from Existing Code"

を選択し、先ほどインストールしたパッケージのライブラリのパスを指定します。

取り込み時に指定するパスは、以下になります。

"\extras\google\google_play_services\libproject\google-play-services_lib"


13


14


取り込み後、eclipseのパッケージエクスプローラーに、

"google-play-services_lib"が作成されていれば完了です。

15


【②APIキーを取得する】

google map API v2用のAPIキーを取得します。

google map API v1用のAPIキーは使用できないので、

新たに取得しなおす必要があります。

※APIキー取得には、googleアカウントが必要です。
   ここでは、googleアカウントはすでに取得済みとして進めていきます。

(1) keystoreのSHA1の値を取得する

APIキーを取得するには、キーストアのSHA1の値が必要です。

デバッグ実行時の場合は、デバッグ用keystoreを使用します。

デバッグ用キーストアは、以下の場所にあります。

"C:\Users\(ユーザー)\.android\debug.keystore"

リリース用キーストアは、リリース時に毎回使用しているキーストアになります。


SHA1の値は、コマンドプロンプトにて、以下のコマンドを実行することで取得できます。

>keytool -list -v -keystore "パス名\キーストア名" -alias androiddebugkey -storepass android -keypass android


※keytoolコマンドが実行できない場合
keytoolコマンドは、jreのパッケージ内のbinフォルダに入っています。
jreのインストール先は、デフォルトだと"C:\Program Files\Java\jre"になるので、
探してみてください。


コマンドを実行すると、以下のように表示されます。

この中の、SHA1の値を、API取得時に使用するので、控えておいてください。

16


(2) google API consoleにて、APIキーを取得する

APIキーの取得は、google API consoleにて行います。

下記URLよりアクセスしてください。

https://code.google.com/apis/console/

初めてですと、下の画像のようなボタンが表示されるので、

クリックしてプロジェクトを作成してください。

17


プロジェクトが作成し終わったら、以下のようにしてください。

"Service"を選択⇒"Google Map API v2"をOKにチェックする

-----

18

-----

19


次に、"API Access"から、"Create new Android key....."を選択してください。

すると、ダイアログが開くので、

キーストアのSHAの値を入力し、続けてセミコロンを入力、

その後ろにgoogle mapを使用するアプリのパッケージ名を入力してください。

※このようになります ⇒ "(SHA値);(アプリのパッケージ名)"

110

入力後、createボタンをクリックすると、APIキーが生成されます。

APIキーは、アプリ開発時に使用するので、控えておいてください。


【③ アプリケーションに、google map API v2を組み込む】

いよいよ、アプリにgoogle map API v2を組み込んでいきます。

いろいろとやらないといけないことがあるので、順を追って進めていきましょう。


(1) アプリのプロジェクトに、google-play-service_libを組み込む

以下の手順にて、ライブラリ設定画面を開いてください。

プロジェクトを右クリックしてメニューを開く ⇒ メニューより"プロパティ"を選択してプロパティダイアログを開く ⇒ "Android"を選択

画面が開いたら、以下の2つを行ってください。

  ① ターゲットをGoogleAPIsにする

  ② ライブラリーに、"google-play-service_lib"を追加する

111

これで、ライブラリの組み込みは完了です。


(2) マニュフェストファイルの設定を行う

マニュフェストファイルの設定が必要です。

下記の、赤字の部分を追記してください。

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.yso.googlemapv2"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
   
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="com.yso.googlemapv2.permission.MAPS_RECEIVE" />
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />


    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />

   
    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="(取得したAPIキー)" />

        <activity
            android:name="com.yso.googlemapv2.MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>


以上で、google map API v2を使用するための準備は完了です。


【④google map API v2を使用して地図を表示するサンプルソース】

最後に、サンプルソースを載せておきます。

google map API v2は、fragmentを使用します。

しかし、fragmentは、Android API version11(=Android3.0)以降でしか使えません。

だからといって、API Version10以下(=Android2.3以前)の端末で、

google map API v2が使用できないわけではありません。

"android-support-v4.jar"をアプリに組み込めば、古いバージョンの端末でも

使用することができます。

このライブラリは、下記のパスにあるので、適宜組み込んでください。

"(sdkインストール先)\extras\android\support\v4"


それでは、サンプルソースです。


●レイアウトxml

赤字で示したように、fragmentを使用します。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:map="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <fragment
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        class="com.google.android.gms.maps.SupportMapFragment"/>

</LinearLayout>


●アクティビティ

アクティビティのほうは、FragmentActivityを親クラスとする点がポイント。

package com.yso.googlemapv2;

import android.os.Bundle;
import android.support.v4.app.FragmentActivity;

public class MainActivity extends FragmentActivity  {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}


下の画像は、上記ソースを実行したものです。

112

v1に比べ、かなりかっこいいですね!



--------------------------------------------------

自作アプリ、

いつでもクイックランチャー ver3.0アップデートを

公開しました!

Slidetask

Google playよりダウンロード可能ですので、是非お使いください!

https://play.google.com/store/apps/details?id=com.yso.slidetask


感想や改善点等、聞かせていただけるとうれしいです。

アプリの中の実装方法で気になる点のご質問も大歓迎です!

« 2013年9月 | トップページ | 2013年11月 »

購入


無料ブログはココログ