2013年9月5日木曜日

Google Maps Android API V2を使ってみる(AndroidManifest.xmlの設定と実行)

前回の「 Google Maps Android API V2を使ってみる(Google Play Services API のインストール&設定)」からの続きになります(`・ω・´)シャキーン

今回は、AndroidManifest.xml設定を行いますφ(`д´)メモメモ...

関連記事一覧です(`・ω・´)シャキーン
1.Google Maps Android API V2を使ってみる(API キーの取得)
2.Google Maps Android API V2を使ってみる(Google Play Services API のインストール&設定)
3.Google Maps Android API V2を使ってみる(AndroidManifest.xmlの設定と実行)


■手順1.AndroidManifest.xmlの編集 Google Maps API V2を使えるようにすためにはAndroidManifest.xmlに、
以前の記事「Google Maps Android API V2を使ってみる(API キーの取得)」で取得したAPIキーを設定したり、 ネットワーク通信を許可したりなどを記述してあげる必要があります。

AndroidManifest.xmlの修正後
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.maptest"
    android:versionCode="1"
    android:versionName="1.0" >
    
     <!-- 
      minSdkVersion 
          アプリケーションが実行するために必要な最小の API レベルを指定する数値。
          API レベルがこの属性で特定された値より低い場合に、ユーザがこのアプリケーションをインストールしないよう保護する。
      maxSdkVersion
          アプリケーションが実行するために必要な最大の API レベルを指定する数値。
          API レベルがこの属性で特定された値より高い場合に、ユーザがこのアプリケーションをインストールしないよう保護する。
      targetSdkVersion
        アプリケーションがこれより低いバージョン ( 最低 minSdkVersion の指定まで ) で実行可能ですが、ここで指定されたバージョンでの動作はをテスト済みであるということを明示する。
          プラットフォームがこのターゲットバージョンの上位互換を守るためになにか余分な処理を実行する必要はないということをプラットフォームに知らせるためのもの。
    -->
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="18" />

    <!-- アプリケーションが要求しているGoogle Maps APIの許可を付与する -->
    <permission
          android:name="com.example.maptest.permission.MAPS_RECEIVE"
          android:protectionLevel="signature"/>
    <!-- アプリケーションが要求しているGoogle Maps APIの許可を付与する -->
    <uses-permission android:name="com.example.maptest.permission.MAPS_RECEIVE"/>        
    
    <!-- インターネットへのアクセスを許可 -->
    <uses-permission android:name="android.permission.INTERNET"/>
    <!-- ネットワーク状態を取得 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <!-- 外部SDカードへの書き込み -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <!-- Google API へのアクセス -->
    <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
    <!-- 位置情報の取得 (Wi-Fi経由) -->
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <!-- 位置情報の取得 (GPS経由) -->
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <!-- OpenGL ES version 2 -->
    <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" >
        
    <!-- Google API の認証キー -->
     <meta-data
       android:name="com.google.android.maps.v2.API_KEY"
       android:value="Google APIコンソールで生成したAPIキーを設定する"/>
 
     <uses-library
       android:name="com.google.android.maps" />
            
        <activity
            android:name="com.example.maptest.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.レイアウトファイルの作成(activity_main.xml)
API Levelが12未満も対象にする場合。(12以上でも問題ない)
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/map"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  class="com.google.android.gms.maps.SupportMapFragment"/>
API Levelが12以上を対象にする場合。
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/map"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  class="com.google.android.gms.maps.MapFragment"/>

■手順3.MainActivityの作成

こちらは、API Levelが12未満用の場合になります。(12以上でも動作する)
package com.example.maptest;

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);
    }

}
こちらは、API Levelが12以上の場合になります。
package com.example.maptest;

import android.app.Activity;
import android.os.Bundle;

public class SampleMapActivity extends Activity {

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

}

■手順3.実行

実行する前に、プロジェクトに設定されているProject Build Targetの確認をしておきます。
activity_main.xmlとMainActivityで記述した内容と一致するAPIバージョンが指定されているか確認する。
(プロジェクトを右クリックしてプロパティを開き、Androidを選択すると確認ができます。)

確認が終わったら実際に実行してみると・・・背景がグレーで何も表示されない( ´゚д゚`)エー

表示されないせいでAPIの設定やAndroidManifest.xmlが間違っているのかなど
色々調べたりしてだいぶここではまっていましたが、
こちらのブログに書かれてる内容が原因っぽい感じでした。
エミュレータでGoogle Maps for Android V2を動かす方法

ブログに書かれている内容を読むと、
原因はGoogle Maps APIを利用するにはGoogle Play Servicesがインストールされている事と、
その最新版が必要?みたいで、現状エミュレーターでインストールできるものでは対応されていない?みたいな感じでした。

そこでどうしてもエミュレーターでやりたい場合には、
手動でGoogle Play Servicesのapkファイルをインストールするれば出来るとのことです。(´・∀・`)ヘー
仕方ないので、実機で確認してみたら普通に表示されました( ゚д゚)ポカーン



どうしてもエミュレーターで動作確認したって言う方は、
次のサイトに書かれているような手順で手動でGoogle Play Servicesの最新版などをインストールすると実行できるかもしれません。
エミュレータでGoogle Maps for Android V2を動かす方法

実際にここのサイトの手順と同じようにやったらエミュレーターでも動くようになりました!
ただ、現在やると動作しません・・・1ヶ月前までは動いてたのに(´;ω;`)ウッ…

エミュレーターで動かすと激重だったので、大人しく実機で確認した方が良いかもしれません・・・orz

念のため手動でやる場合の手順を書いておきます。

エミュレーター起動後に、コマンドプロンプトで「adb devices」を実行する。
C:\Users\ユーザー名>adb devices
List of devices attached
emulator-5554   device
※adbコマンドのパスが通っていないと正しく実行できません。 出力された結果の「emulator-5554」がエミュレーターの名前になります。
ここは実行している環境などで変わる?

次に、必要なapkファイルをダウンロードしてきます。
こちらのサイトに最新のGoogle Play Servicesのapkファイルがアップされているみたいでした。

com.android.vending-4.2.9.apk
com.google.android.gms.apk

ダウンロードが終わったら、エミュレーターにインストールを行います。
#vending.apkのインストール。パスはダウンロードした場所を正しく指定してください
adb -s emulator-5554 install C:\app\android-apk\com.android.vending-4.2.9.apk
71 KB/s (6129144 bytes in 83.657s)
        pkg: /data/local/tmp/com.android.vending-4.2.9.apk
Success

#gms.apkのインストール。パスはダウンロードした場所を正しく指定してください
adb -s emulator-5554 installC:\app\android-apk\com.google.android.gms.apk
64 KB/s (6064733 bytes in 91.883s)
        pkg: /data/local/tmp/com.google.android.gms.apk
Success
とうまくインストールが出来れば正しくエミュレーターで動くようになるかもしれません!?((((;゚Д゚))))ガクガクブルブル

現状だと、インストールしようとすると、
Failure [INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES]
Failure [INSTALL_PARSE_FAILED_NO_CERTIFICATES]
などが出てしまいうまく行きませんでした・・・。

この辺を解決すればもしかたらできるかもです!

以上です(`・ω・´)ゞビシッ!!
参考URL

0 件のコメント:

コメントを投稿