このアプリでは、機能的なV2グーグルマップを追加しようとしています。アクティビティの作成、マップのキーの取得、およびxmlファイルの作成に関するチュートリアルのほとんどを見て、ステップを逃したかどうかを確認しました(4回のように実行しました)が、そうではありません。ステップを逃したようです。
ここ は私が使用したサイトです:
携帯電話でアプリを実行すると(Google Play開発者サービスはエミュレーターで機能しないため)、次の2つのエラーが発生します。
02-11 22:10:54.690: E/AndroidRuntime(4526): Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.myfirstapp/com.example.myfirstapp.ShowActivity}: Android.view.InflateException: Binary XML file line #8: Error inflating class fragment
02-11 22:10:54.690: E/AndroidRuntime(4526):
Caused by: Android.app.Fragment$InstantiationException: Unable to instantiate fragment com.google.Android.gms.maps.MapFragment: make sure class name exists, is public, and has an empty constructor that is public
これが私の活動です:
package com.example.myfirstapp;
import Android.app.Activity;
import Android.os.Bundle;
import Android.support.v4.app.FragmentActivity;
import Android.view.Menu;
import com.google.Android.maps.*;
import com.google.Android.gms.maps.MapFragment;
public class ShowActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_map, menu);
return true;
}
//@Override
//protected boolean isRouteDisplayed() {
// TODO Auto-generated method stub
//return false;
//}
}
フォーマットして申し訳ありませんが、ここに私のxmlファイルがあります:
<RelativeLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
xmlns:tools="http://schemas.Android.com/tools"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
tools:context=".ShowActivity" >
<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" />
</RelativeLayout>
GoogleAPIとGooglePlay開発者サービスをインポートしたので、すべてのインポートが機能しています。これにより、2番目のエラーでMapFragmentが空であると表示されたのはなぜか疑問に思います。マニフェストファイルコード:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:Android="http://schemas.Android.com/apk/res/Android"
package="com.example.myfirstapp"
Android:versionCode="1"
Android:versionName="1.0" >
<uses-permission Android:name="Android.permission.READ_CONTACTS" />
<uses-permission Android:name="Android.permission.SUBSCRIBED_FEEDS_READ" />
<uses-permission Android:name="Android.permission.ACCESS_FINE_LOCATION" />
<uses-permission Android:name="Android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission Android:name="Android.permission.INTERNET" />
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission Android:name="com.example.myfirstapp.permission.MAPS_RECEIVE" />
<permission
Android:name="com.example.myfirstapp.permission.MAPS_RECEIVE"
Android:protectionLevel="signature" />
<uses-feature
Android:glEsVersion="0x00020000"
Android:required="true" />
<uses-sdk
Android:minSdkVersion="14"
Android:targetSdkVersion="15" />
<application
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
<activity
Android:name="com.example.myfirstapp.MainActivity"
Android:label="@string/title_activity_main" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
Android:name="Android.app.default_searchable"
Android:value=".SearchResultsActivity" />
</activity>
<activity
Android:name="com.example.myfirstapp.SearchResultsActivity"
Android:label="@string/title_activity_search_results"
Android:launchMode="singleTop" >
<intent-filter>
<action Android:name="Android.intent.action.SEARCH" />
</intent-filter>
<meta-data
Android:name="Android.app.searchable"
Android:resource="@xml/searchable" />
</activity>
<activity
Android:name="com.example.myfirstapp.AddContacts"
Android:label="@string/title_activity_add_contacts" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
Android:name="com.example.myfirstapp.ContactActivity"
Android:label="@string/title_activity_contact" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
Android:name="com.example.myfirstapp.DisplayInfo"
Android:label="@string/title_activity_display_info" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<provider
Android:name="com.example.myfirstapp.SomeProvider"
Android:authorities="com.example.myfirstapp.SomeProvider" >
</provider>
<activity
Android:name="com.example.myfirstapp.EditContacts"
Android:label="@string/title_activity_edit_contacts" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
Android:name="com.example.myfirstapp.DeleteContact"
Android:label="@string/title_activity_delete_contact" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
Android:name="com.example.myfirstapp.FlightInfo"
Android:label="@string/title_activity_flight_info" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
Android:name="com.example.myfirstapp.EventInfo"
Android:label="@string/title_activity_event_info" >
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
Android:name="com.example.myfirstapp.ContactsActivity"
Android:label="@string/title_activity_contacts" >
</activity>
<activity
Android:name="com.example.myfirstapp.ShowActivity"
Android:label="@string/title_activity_map" >
</activity>
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="removed" />
<uses-library Android:name="com.google.Android.maps" />
</application>
</manifest>
以下のコードを試してください:
public class ShowActivity extends Android.support.v4.app.FragmentActivity {
private GoogleMap mMap;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
setUpMapIfNeeded();
}
@Override
protected void onResume() {
super.onResume();
setUpMapIfNeeded();
}
private void setUpMapIfNeeded() {
// Do a null check to confirm that we have not already instantiated the map.
if (mMap == null) {
// Try to obtain the map from the SupportMapFragment.
mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
.getMap();
// Check if we were successful in obtaining the map.
if (mMap != null) {
setUpMap();
}
}
}
}
XMLファイルコード:
<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"/>
マニフェストファイルコード:
<permission
Android:name="com.example.myfirstapp.permission.MAPS_RECEIVE"
Android:protectionLevel="signature"/>
<uses-permission Android:name="com.example.myfirstapp.permission.MAPS_RECEIVE"/>
<!-- Copied from Google Maps Library/AndroidManifest.xml. -->
<uses-sdk
Android:minSdkVersion="8"
Android:targetSdkVersion="16"/>
<uses-permission Android:name="Android.permission.INTERNET"/>
<uses-permission Android:name="com.google.Android.providers.gsf.permission.READ_GSERVICES"/>
<!-- External storage for caching. -->
<uses-permission Android:name="Android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-feature
Android:glEsVersion="0x00020000"
Android:required="true"/>
<application
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="removed" />
</application>
ステップ1:マニフェストに以下の行を含め、アプリケーションタグ内に必ず追加してください
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="AIzaSyA0YQoByyHKGbB2R3pSIerQCEiGlwieRas" />
<meta-data
Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />
例::
<application
Android:name="taxialways.user.MyApplication"
Android:allowBackup="true"
Android:icon="@drawable/ic_launcher"
Android:label="@string/app_name"
Android:theme="@style/AppTheme" >
<activity
Android:name="taxialways.user.Register"
Android:label="@string/title_activity_register"
Android:noHistory="true"
Android:screenOrientation="portrait" >
</activity>
<meta-data
Android:name="com.google.Android.maps.v2.API_KEY"
Android:value="AIzaSyA0YQoByyHKGbB2R3pSIerQCEiGlwieRas" />
<meta-data
Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />
</application>
ステップ2:アクティビティが拡張されていることを確認してくださいFragmentActivity
ステップ3:xml
で以下のようにmapFragment要素を使用します
<fragment
Android:id="@+id/map"
Android:name="com.google.Android.gms.maps.SupportMapFragment"
Android:layout_width="fill_parent"
Android:layout_height="match_parent"
Android:layout_alignParentBottom="true"
Android:layout_below="@+id/lineartab" />
Google Play開発者サービスV2(Googleマップ機能用)をAndroid 2.3.4。(APIレベル10)にデプロイしようとしていますが、同じ問題が発生しました。解決方法は次のとおりです。
google-play-services_libをライブラリとして含める必要がありました。 Eclipseでは、これを次のように実行できます。
これは重要です。ライブラリのプロジェクトビルドターゲットが、アプリで使用されているものと同じであることを確認してください。
APIバージョンが11未満であるため、MapFragmentの代わりにSupportMapFragmentが使用されます。
お役に立てれば。これを解決するのに少なくとも3時間かかりました。
マニフェストに次の行を追加します
<meta-data
Android:name="com.google.Android.gms.version"
Android:value="@integer/google_play_services_version" />