我一直有这个问题超过一个星期了,任何尝试调用SupportMapFragment类的'onCreateView'方法都会导致运行时错误。由于调试原因,我扩展了SupportMapFragment类。该应用程序将编译并运行,但当被告知要显示谷歌地图片段时,会立即崩溃,熟悉“无法充气地图片段”错误。
注意:
清单
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
package="com.softcrypt"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk
android:minSdkVersion="10"
android:targetSdkVersion="10"/>
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="com.google.android.providers.gfs.permission.READ_GSERVICES"/>
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme">
<!-- Libraries -->
<uses-library
android:name="com.google.android.maps"
android:required="true"/>
<!-- Activities -->
<activity
android:label="@string/app_name"
android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity
android:name=".SoftCryptMapActivity"
android:label="Map"
android:enabled="true">
<intent-filter>
<action android:name="com.softcrypt.SoftCryptMapActivity"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
<!-- Meta Data -->
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="@string/apiKey" />
<meta-data
android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version"/>
</application>
logcat的
04-30 18:08:30.367: D/SoftCrypt(1555): SoftCryptMapActivity Started
04-30 18:08:30.787: D/dalvikvm(1555): GC_FOR_ALLOC freed 207K, 9% free 3178K/3456K, paused 40ms, total 42ms
04-30 18:08:30.857: I/Google Maps Android API(1555): Google Play services client version: 4323000
04-30 18:08:30.887: I/Google Maps Android API(1555): Google Play services package version: 4323030
04-30 18:08:30.927: D/SoftCrypt(1555): Creating MapFragment...
04-30 18:08:30.967: D/AndroidRuntime(1555): Shutting down VM
04-30 18:08:30.967: W/dalvikvm(1555): threadid=1: thread exiting with uncaught exception (group=0xb3b0dba8)
04-30 18:08:30.987: E/AndroidRuntime(1555): FATAL EXCEPTION: main
04-30 18:08:30.987: E/AndroidRuntime(1555): Process: com.softcrypt, PID: 1555
04-30 18:08:30.987: E/AndroidRuntime(1555): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.softcrypt/com.softcrypt.SoftCryptMapActivity}: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.app.ActivityThread.access$800(ActivityThread.java:135)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.os.Handler.dispatchMessage(Handler.java:102)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.os.Looper.loop(Looper.java:136)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.app.ActivityThread.main(ActivityThread.java:5017)
04-30 18:08:30.987: E/AndroidRuntime(1555): at java.lang.reflect.Method.invokeNative(Native Method)
04-30 18:08:30.987: E/AndroidRuntime(1555): at java.lang.reflect.Method.invoke(Method.java:515)
04-30 18:08:30.987: E/AndroidRuntime(1555): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
04-30 18:08:30.987: E/AndroidRuntime(1555): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
04-30 18:08:30.987: E/AndroidRuntime(1555): at dalvik.system.NativeStart.main(Native Method)
04-30 18:08:30.987: E/AndroidRuntime(1555): Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class fragment
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:713)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.view.LayoutInflater.rInflate(LayoutInflater.java:755)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.view.LayoutInflater.inflate(LayoutInflater.java:492)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.view.LayoutInflater.inflate(LayoutInflater.java:397)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.view.LayoutInflater.inflate(LayoutInflater.java:353)
04-30 18:08:30.987: E/AndroidRuntime(1555): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:290)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.app.Activity.setContentView(Activity.java:1929)
04-30 18:08:30.987: E/AndroidRuntime(1555): at com.softcrypt.SoftCryptMapActivity.onCreate(SoftCryptMapActivity.java:33)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.app.Activity.performCreate(Activity.java:5231)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2159)
04-30 18:08:30.987: E/AndroidRuntime(1555): ... 11 more
04-30 18:08:30.987: E/AndroidRuntime(1555): Caused by: java.lang.SecurityException: The Maps API requires the additional following permissions to be set in the AndroidManifest.xml to ensure a correct behavior:
04-30 18:08:30.987: E/AndroidRuntime(1555): <uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
04-30 18:08:30.987: E/AndroidRuntime(1555): at maps.e.ci.a(Unknown Source)
04-30 18:08:30.987: E/AndroidRuntime(1555): at maps.e.ay.a(Unknown Source)
04-30 18:08:30.987: E/AndroidRuntime(1555): at maps.e.ay.a(Unknown Source)
04-30 18:08:30.987: E/AndroidRuntime(1555): at maps.e.al.a(Unknown Source)
04-30 18:08:30.987: E/AndroidRuntime(1555): at maps.e.bh.a(Unknown Source)
04-30 18:08:30.987: E/AndroidRuntime(1555): at maps.e.bg.a(Unknown Source)
04-30 18:08:30.987: E/AndroidRuntime(1555): at etu.onTransact(SourceFile:107)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.os.Binder.transact(Binder.java:361)
04-30 18:08:30.987: E/AndroidRuntime(1555): at com.google.android.gms.maps.internal.IMapFragmentDelegate$a$a.onCreateView(Unknown Source)
04-30 18:08:30.987: E/AndroidRuntime(1555): at com.google.android.gms.maps.SupportMapFragment$a.onCreateView(Unknown Source)
04-30 18:08:30.987: E/AndroidRuntime(1555): at com.google.android.gms.dynamic.a$4.b(Unknown Source)
04-30 18:08:30.987: E/AndroidRuntime(1555): at com.google.android.gms.dynamic.a.a(Unknown Source)
04-30 18:08:30.987: E/AndroidRuntime(1555): at com.google.android.gms.dynamic.a.onCreateView(Unknown Source)
04-30 18:08:30.987: E/AndroidRuntime(1555): at com.google.android.gms.maps.SupportMapFragment.onCreateView(Unknown Source)
04-30 18:08:30.987: E/AndroidRuntime(1555): at com.softcrypt.SoftCryptMapFragment.onCreateView(SoftCryptMapFragment.java:24)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:911)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1093)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.support.v4.app.FragmentManagerImpl.addFragment(FragmentManager.java:1195)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:291)
04-30 18:08:30.987: E/AndroidRuntime(1555): at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:685)
04-30 18:08:30.987: E/AndroidRuntime(1555): ... 21 more
map_activity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
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"
android:baselineAligned="false"
android:orientation="vertical">
<fragment
android:id="@+id/mapFragment"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:name="com.softcrypt.SoftCryptMapFragment"/>
FragmentActivity Subclass
public class SoftCryptMapActivity extends FragmentActivity
{
private GoogleMap map;
public void onCreate(Bundle savedInstanceState)
{
Log.d(super.getString(R.string.app_name), "SoftCryptMapActivity Started");
super.onCreate(savedInstanceState);
// Check for Service Availability
if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext()) != ConnectionResult.SUCCESS)
{
Toast.makeText(getBaseContext(), "No Service", Toast.LENGTH_LONG).show();
finish();
}
super.setContentView(R.layout.map_activity);
Log.d(super.getString(R.string.app_name), "Content View Set");
map = ((SupportMapFragment)super.getSupportFragmentManager().findFragmentById(R.id.mapFragment)).getMap();
// Check for Service Availability
if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(getBaseContext()) != ConnectionResult.SUCCESS)
{
Toast.makeText(getBaseContext(), "No Service", Toast.LENGTH_LONG).show();
finish();
}
}
}
SupportMapFragment Subclass
public class SoftCryptMapFragment extends SupportMapFragment
{
GoogleMap map;
FragmentManager fm;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
Log.d(super.getString(R.string.app_name), "Creating MapFragment...");
return super.onCreateView(inflater, container, savedInstanceState);
}
}
答案 0 :(得分:1)
您需要在Manifest中添加用户权限com.google.android.providers.gsf.permission.READ_GSERVICES
才能使用MAP API
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
您的崩溃日志清楚地显示了这一点。
Caused by: java.lang.SecurityException: The Maps API requires the additional following permissions to be set in the AndroidManifest.xml to ensure a correct behavior: