戌印-INUJIRUSHI- (Androidあれこれ)

Androidのプログラミングをメインにしてます。記事に貼られたソースコードはダブルクリックすることで行番号をはずしてコピーすることができます。

 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
08

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Google Maps Android API v2 試してみた

Google Maps Android API v2 発表のニュースが出ていたので早速試してみた。
@IT - Google Maps Android APIがアップデート
AndroidDevelopers - New Google Maps Android API now part of Google Play services(English)

英語さっぱり(ニュースも@ITで知った)なので、とりあえずググってみたらすでに試している方がいたのであっさり解決。
Shimejiで有名なadamrockerさんのサイト(仕事はやいです…)
throw Life - Google Maps Android API v2を使ってみた

adamrockerさんはXMLで静的にやっていたので、そのままやるのもどうかと思い動的に実装してみました
(といってもnewして表示するだけの簡単な作業ですが…)

ほとんど書き写し状態だったため Google Maps Android API v2 導入部分を別記事でおこしました(2012/12/08)
⇒ Google Maps Android API v2 導入の仕方


--------------------------------------------------------------------------------
【対象】
openGL ES 2.0 を使用しているため Android 2.2 (API 8 Froyo) ~ となります。

※ Android 2.1 (API 7 Eclair MR1) 以下では openGL ES 2.0 をサポートしていないため、ビルドはできても実行はできません。
※ Android 2.x で Fragment を使うには android-support-v4.jar が必要になります

--------------------------------------------------------------------------------
【動作確認環境】
HTC J ISW13HT (Android 4.0.4)
MapFragment_htcj.png
紹介されているサイトでは立体的だけど、たぶん、これでいいはず…

エミュレータでのテスト不可
実行にはGoogle Playが必要なので、エミュレータだとGoogle Playのインストール要求画面がでます。
「Play開発者サービスを入手」ボタンを押すとエラーで落ちました。
MapFragment_emu.png

--------------------------------------------------------------------------------
【Google Maps Android API v2 のライブラリを取得】
Google Maps Android API v2 では Google Play Services が必要になるので Android SDK Manager からダウンロードを行います。
MapFragment_sdk.png

次にダウンロードした Google Play Services はライブラリ・プロジェクトなのでインポートします。
MapFragmentLib_import.png
${ANDROID_SDK}/extras/google/google_play_services/libproject/google-play-services_lib

--------------------------------------------------------------------------------
【プロジェクト作成】
Google Maps v2 を動かすためのプロジェクトを作成します。
パッケージ名は好きな名前でつけてください。
ここでは jp.inujirushi.android.mapsv2 とつけています。(プロジェクト名は SampleMapV2)

このプロジェクトに先ほどインポートしたライブラリ・プロジェクトを追加します。
MapFragmentLib_add.png

--------------------------------------------------------------------------------
【コーディング】
XMLを使わずに動的に実装するため Activity.java と AndroidManifest.xml の2つだけいじります。

Activity クラス
package jp.inujirushi.android.mapsv2;

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

import com.google.android.gms.maps.SupportMapFragment;

public class MainActivity extends FragmentActivity {

private static final String TAG_MAP_FRAGMENT = "MAP_FRAGMENT";

private SupportMapFragment mMapFragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

// 登録したタグから MapFragment を取得する(デバイス回転などの再生成対策)
mMapFragment = (SupportMapFragment) getSupportFragmentManager()
.findFragmentByTag(TAG_MAP_FRAGMENT);
if (mMapFragment == null) {
// MapFragment がなければ作成する
mMapFragment = SupportMapFragment.newInstance();
getSupportFragmentManager().beginTransaction()
.add(android.R.id.content, mMapFragment, TAG_MAP_FRAGMENT)
.commit();
}
}
}
今回は MapFragment を表示するだけなので add して終わりです。
Android 2.x 対応のため SupportMapFragment を使っていますが、 Android 3.0 ~ は MapFragmentになります。

公式のサンプルプロジェクトでは ${ANDROID_SDK}/extras/google/google_play_services/samples/maps/src/com/example/mapdemo/
ProgrammaticDemoActivity.java
が今回の記事にあたります。

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

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="16" />

<!-- 必要なパーミッションを追加 -->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<!-- 実行には OpenGL ES version 2 が必要 -->
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />

<!-- Google API に接続するためのパーミッションを追加 -->
<permission
android:name="jp.inujirushi.android.mapsv2.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />
<uses-permission android:name="jp.inujirushi.android.mapsv2.permission.MAPS_RECEIVE" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<!-- Google MAP API keyを定義 -->
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="[API key]" />

<activity
android:name="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>
色が塗られている行を追加します。
各アプリで変更する必要があるのは2つ。

① 24-27行目で定義している Google API に接続するためのパーミッション。
<permission> <uses-permission> の2つの android:name
[パッケージ名] + ".permission.MAPS_RECEIVE" を設定します。

② 35-37行目の Google Maps を使用するための API key
<meta-data>android:value に次の【API key 取得】で手に入れる API key を設定します。

--------------------------------------------------------------------------------
【API key 取得】
Google Map を表示するには API key が必要になります。
API key を作成するには、まず Google APIs Console にログインします。
Googleアカウントでログインしたら、最初に大きく表示されている [Create Project..] でプロジェクトを作成します。

プロジェクトを作成すると [Services] の [All Services] が表示されているので、そこから Google Maps Android API v2 を探してONにします。
MapFragment_GoogleAPI_Console.png

次に左のタブから [API Access] を選択して [Create new Android key…] ボタンで API key を作ります。
MapFragment_APIKey.png
入力欄に [SHA-1 ハッシュ値(※)] + ";" + [アクセス元のアプリパッケージ名] を入力し、[Create] ボタンを押して作成します。
ここで登録された API key を先ほどの AndroidManifest.xml に定義した <meta-data> の android:value="[API key]" に登録してください。

※ [SHA-1 ハッシュ値] の作成
[SHA-1 ハッシュ値] は keytool を使って アプリの証明書(デバッグ用証明書 debug.keystore でOK)から作成します。
keytool はコマンドプロンプトから実行します。
スタートメニューの [アクセサリ - コマンドプロンプト] を起動。

以下のコマンドを実行して作成します(パスは各自の環境に合わせてください)

①JDKのインストールフォルダに移動
cd C:\Program Files\Java\jdk1.7.0_09\bin

② keytool 実行(Windows 7 の場合)
keytool -v -list -keystore "C:\Users\[ユーザー]\.android\debug.keystore"

③ 作成された『証明書のフィンガプリント』をコピー
SHA1: の後ろが必要なハッシュ値になります。

--------------------------------------------------------------------------------
これで、MapFragmentが実行できるようになりました。
ピンチ、スワイプ機能は標準で搭載されています。

あとはインストールして実行すれば、動作確認環境に貼ったスクリーンショットのようになります。
スポンサーサイト

Comments

Leave a Comment


Body
プロフィール

とむ・やむくん

Author:とむ・やむくん
管理人について

Windows 7 / 64bit
Eclipse 4.2 Juno (日本語パッチ済)

スポンサーサイト
最新トラックバック
検索フォーム
ブロとも申請フォーム
QRコード
QR
Twitter
2013/01/04 19:00 カウント開始

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。