使用百度地图遇到的问题,看起来挺常见的。
1.错误信息
java.lang.RuntimeException: Unable to start activity ComponentInfo{swjtu.park/swjtu.park.activity.MainActivity}: android.view.InflateException: Binary XML file line #7: Error inflating class com.baidu.mapapi.map.MapView
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2351)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2403)
at android.app.ActivityThread.access$600(ActivityThread.java:165)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1373)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:194)
at android.app.ActivityThread.main(ActivityThread.java:5391)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.view.InflateException: Binary XML file line #7: Error inflating class com.baidu.mapapi.map.MapView
at android.view.LayoutInflater.createView(LayoutInflater.java:613)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:687)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:746)
at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
at swjtu.park.model.NeedParkFragment.onCreateView(NeedParkFragment.java:19)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:1962)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1067)
at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1248)
at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:738)
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1613)
at android.support.v4.app.FragmentController.execPendingActions(FragmentController.java:330)
at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:547)
at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1236)
at android.app.Activity.performStart(Activity.java:5132)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2324)
... 11 more
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.constructNative(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
at android.view.LayoutInflater.createView(LayoutInflater.java:587)
... 26 more
Caused by: java.lang.SecurityException: Requires READ_PHONE_STATE: Neither user 10086 nor current process has android.permission.READ_PHONE_STATE.
at android.os.Parcel.readException(Parcel.java:1425)
at android.os.Parcel.readException(Parcel.java:1379)
at com.android.internal.telephony.IPhoneSubInfo$Stub$Proxy.getSubscriberId(IPhoneSubInfo.java:223)
at android.telephony.TelephonyManager.getSubscriberIdGemini(TelephonyManager.java:2109)
at android.telephony.TelephonyManager.getSubscriberId(TelephonyManager.java:1074)
at com.baidu.platform.comapi.c.c.g(Unknown Source)
at com.baidu.platform.comapi.c.c.c(Unknown Source)
at com.baidu.mapapi.a.b(Unknown Source)
at com.baidu.mapapi.map.MapView.a(Unknown Source)
at com.baidu.mapapi.map.MapView.<init>(Unknown Source)
... 29 more
提取出错误信息:
Binary XML file line #7: Error inflating class com.baidu.mapapi.map.MapView
然后上网找了N多解决方案,比如application里加android:name=”“…,还有在setContentView前初始化BMapManager对象。。。。但都没有效。
2.解决
直到看到一篇博客:此博客
然后我查看了自己的错误,还真有这个权限:
Caused by: java.lang.SecurityException: Requires READ_PHONE_STATE: Neither user 10086 nor current process has android.permission.READ_PHONE_STATE.
于是加上之后就正常了。
3.总结
开始我还以为是Fragment里不能加载百度地图,于是用Activity来试,还是同样的错误。
毕竟太年轻,光会看log还不行,还要认真看才能发现所有问题。
革命的道路还有很远。