Google Mapを使ってサンプルプロジェクトを作ってみましたが、できませんでした。お願い助けて!
テストデバイス:Android 4.0.4
エラーメッセージ :
12-29 23:45:32.605: E/AndroidRuntime(9437): FATAL EXCEPTION: main
12-29 23:45:32.605: E/AndroidRuntime(9437):
Java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example.test_googlemap/com.example.test_googlemap.MainActivity}:
Android.view.InflateException: Binary XML file line #2: Error
inflating class fragment 12-29 23:45:32.605: E/AndroidRuntime(9437):
Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1968)
12-29 23:45:32.605: E/AndroidRuntime(9437): at
Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:1993)
12-29 23:45:32.605: E/AndroidRuntime(9437): at
Android.app.ActivityThread.access$600(ActivityThread.Java:127) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1159)
12-29 23:45:32.605: E/AndroidRuntime(9437): at
Android.os.Handler.dispatchMessage(Handler.Java:99) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Android.os.Looper.loop(Looper.Java:137) 12-29 23:45:32.605:
E/AndroidRuntime(9437): at
Android.app.ActivityThread.main(ActivityThread.Java:4507) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Java.lang.reflect.Method.invokeNative(Native Method) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Java.lang.reflect.Method.invoke(Method.Java:511) 12-29 23:45:32.605:
E/AndroidRuntime(9437): at
com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:790)
12-29 23:45:32.605: E/AndroidRuntime(9437): at
com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:557) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
dalvik.system.NativeStart.main(Native Method) 12-29 23:45:32.605:
E/AndroidRuntime(9437): Caused by: Android.view.InflateException:
Binary XML file line #2: Error inflating class fragment 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:697)
12-29 23:45:32.605: E/AndroidRuntime(9437): at
Android.view.LayoutInflater.inflate(LayoutInflater.Java:466) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Android.view.LayoutInflater.inflate(LayoutInflater.Java:396) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Android.view.LayoutInflater.inflate(LayoutInflater.Java:352) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
com.Android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.Java:271)
12-29 23:45:32.605: E/AndroidRuntime(9437): at
Android.app.Activity.setContentView(Activity.Java:1835) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
com.example.test_googlemap.MainActivity.onCreate(MainActivity.Java:11)
12-29 23:45:32.605: E/AndroidRuntime(9437): at
Android.app.Activity.performCreate(Activity.Java:4465) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1052)
12-29 23:45:32.605: E/AndroidRuntime(9437): at
Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:1932)
12-29 23:45:32.605: E/AndroidRuntime(9437): ... 11 more 12-29
23:45:32.605: E/AndroidRuntime(9437): Caused by:
Java.lang.ClassCastException: com.google.Android.gms.maps.MapFragment
cannot be cast to Android.support.v4.app.Fragment 12-29 23:45:32.605:
E/AndroidRuntime(9437): at
Android.support.v4.app.Fragment.instantiate(Fragment.Java:394) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Android.support.v4.app.Fragment.instantiate(Fragment.Java:369) 12-29
23:45:32.605: E/AndroidRuntime(9437): at
Android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.Java:272)
12-29 23:45:32.605: E/AndroidRuntime(9437): at
Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:669)
12-29 23:45:32.605: E/AndroidRuntime(9437): ... 20 more
ソースコード :
package com.example.test_googlemap;
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);
}
}
activity_main.xml:
<?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"/>
Manifest.xml:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.test_googlemap"
Android:versionCode="1"
Android:versionName="1.0" >
<uses-sdk
Android:minSdkVersion="3"
Android:targetSdkVersion="15" />
<application
Android:allowBackup="true"
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
<activity
Android:name="com.example.test_googlemap.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>
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="I removed it!"/>
</application>
<permission
Android:name="com.example.Test_GoogleMap.permission.MAPS_RECEIVE"
Android:protectionLevel="signature"/>
<uses-permission Android:name="com.example.Test_GoogleMap.permission.MAPS_RECEIVE"/>
<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"/>
<uses-feature
Android:glEsVersion="0x00020000"
Android:required="true"/>
</manifest>
FragmentActivity
を拡張しています。これは、Androidサポートパッケージのフラグメントのバックポートを使用しようとしていることを示しています。ただし、<fragment>
要素はMapFragment
を参照します。これは、フラグメントのネイティブAPIレベル11エディション用です。
MapFragment
をSupportMapFragment
に置き換えると、この特定のクラッシュが解消されます。
同じ問題があり、次の2つのタグのうち1つだけを追加するのは間違いでした。 これら2つのうちの1つも欠落していることに注意してください
<meta-data Android:name="com.google.Android.maps.v2.API_KEY" Android:value="<YOUR VALUE>"/> <meta-data Android:name="com.google.Android.gms.version" Android:value="@integer/google_play_services_version" />
APIレベルのUIの問題を考えているので、実際のエラーは本当に誤解を招くものです。
時には両方を使用しています-
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="<YOUR VALUE>"
/>
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="<YOUR VALUE>"
/>
両方を使用しないでください...場所、場所、地図が必要な場合はgeo.API_KEYを使用し、場所と地図が必要な場合はmaps.v2.API_KEYを使用してください。
受け入れられた答えは正しいですが、私があなたと共有する意味のある情報です、私が直面しているのと同じ問題に直面している人かもしれません
すべてがGoogleコードと同じように機能している場合は、マニフェストファイルを確認してください。私の場合は、ジオキーとマップキーを追加したため、例外が発生します。
注-マニフェストファイルに2つのキーを追加しないでください。マップキーを削除してください
meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="@string/google_maps_key"/>
上記のコードとこのコードを追加します。
<meta-data
Android:name="com.google.Android.geo.API_KEY"
Android:value="@string/auto_location"/>
<meta-data
Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version"/>
この問題は、andriod_manifest.xmlファイルのSDKバージョンの非互換性が原因で、activity_main.xml(またはres/layoutに存在するXMLファイル)で言及されているFragmentクラスを拡張できない場合にも発生します。
エミュレータでマップを取得するためのSDKレベルの正しいバージョンは次のとおりです。
<uses-sdk
Android:minSdkVersion="11"
Android:targetSdkVersion="21" />
私の場合、この例外をなくすために2つの修正を行わなければなりませんでした。
既に回答済みの質問である場合でも、フラグメントでsuper.onCreateView
を呼び出すと、このエラーが発生する可能性があります。実行時にクラッシュします。
必ずonCreateView
メソッドをオーバーライドして、レイアウトを大きくしてください。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.my_fragment, container, false);
return view;
}
この欠陥は、playサービスライブラリv9.0.0で解決されています。 https://code.google.com/p/gmaps-api-issues/issues/detail?id=9021#makechanges
インターネットのアクセス許可を使用して、マニフェストファイルの直接の子にしてください。以下のようにして試してください。
また、マップを使用するには次のものが必要です。
1.アクティビティファイルのMap activity
を拡張する必要があります
2.APIキーが必要です。コードにキーがありませんでした。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.test_googlemap"
Android:versionCode="1"
Android:versionName="1.0" >
<uses-permission Android:name="Android.permission.INTERNET"/>
<uses-sdk
Android:minSdkVersion="3"
Android:targetSdkVersion="15" />