【问题标题】:Google map crashing in few devices谷歌地图在少数设备上崩溃
【发布时间】:2016-01-03 09:07:19
【问题描述】:

我的应用在 Moto G (Android 5.0.2) 中运行良好,但在 Karbon spark (Android 5.1.1) 和其他几台设备中崩溃。此崩溃是由于 MapFragment 造成的。 Min skd 是 17,所以我使用 MapFragment。

AndroidManifest.xml

<permission android:name="com.dashboard.Activity.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.dashboard.Activity.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

<meta-data
    android:name="com.google.android.gms.version"
    android:value="@integer/google_play_services_version" />
<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="@string/api_key" />

build.gradle

compile 'com.google.android.gms:play-services-maps:8.4.0'

activity_main.xml

<fragment android:id="@+id/map"
    android:name="com.google.android.gms.maps.MapFragment"
    android:layout_width="match_parent" 
    android:layout_height="match_parent" />

Activity.java

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); //App crashes here
}

------------错误日志---------

Unable to start activity ComponentInfo{ com.dashboard.Activity.ActivityA}:
android.view.InflateException: Binary XML file line #10: Error inflating class fragment
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
Caused by: android.view.InflateException: Binary XML file line #10: Error inflating class fragment
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:378)
at android.app.Activity.setContentView(Activity.java:2145)
at com.dashboard.Activity.ActivityA.onCreate(ActivityA.java:62)
at android.app.Activity.performCreate(Activity.java:5990)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
at android.app.ActivityThread.access$800(ActivityThread.java:151)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5254)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)

【问题讨论】:

  • @MsYvette 添加了我的完整日志文件...
  • 我也有同样的问题!快把我逼疯了!

标签: android google-maps supportmapfragment mapfragment


【解决方案1】:

我今天也遇到了同样的问题,这让我发疯了。

如果你正在运行findbyID(R.id.map);注释掉。片段不应该以这种方式膨胀。

尝试将课程从 MapFragment 更改为 SupportMapFragment

另外,处理地图片段的类应该扩展SupportMapFragment,这是我的样子:

public class MapFragment extends SupportMapFragment implements OnMapReadyCallback {

我的 MapFramgment.xml

<?xml version="1.0" encoding="utf-8"?>
<fragment
    android:name="com.mypackage.android.Views.MapFragment"
    android:id="@+id/map_fragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_weight="1"
    class="com.google.android.gms.maps.SupportMapFragment"
    xmlns:android="http://schemas.android.com/apk/res/android">
    </fragment>

祝你好运!

【讨论】:

  • 除了 onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);并且 min sdk 是 17,所以我应该使用 MapFragment 。但是我如何尝试使用 SupportMapFragment 但没有成功
  • 我已经解决了我的问题...你可以检查我的答案以备将来参考
【解决方案2】:

这是一个已知的 Google 地图问题,当设备处于低内存状态时会出现此问题。 Google Map 尝试创建一个在这种情况下失败的文件,并且 MapFragment 类无法膨胀。

在 Karbon spark(Android 5.1.1) 设备中插入 SD 卡,不会出现问题。 Google 仍在努力解决此问题,目前尚无法修复。

https://code.google.com/p/gmaps-api-issues/issues/detail?id=9021&q=NullPointerException&sort=-id&colspec=ID%20Type%20Status%20Introduced%20Fixed%20Summary%20Stars%20ApiType%20Internal

【讨论】:

    【解决方案3】:

    我想,是谷歌地图api问题(credential值) 请检查控制台并删除凭据或添加正确的凭据。

    请在release文件夹中添加api键值(请通过app文件夹查看)

    例如:api 密钥:AIzaSyBdVl-cTICSwYKrZ95SuvNw7dbMuDt1KG0

    例如:凭证:BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:91:AF:A1:66:6E:44:5D:75

    AndroidManifest.xml

    <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="YOUR_API_KEY"/>
    

    【讨论】:

    • 我已经添加了 API 密钥,并且它在 moto 中运行良好,但是其他几个设备给出了错误
    • 我认为,你的编译版本是在 Moto G 中运行的。请在发布文件夹中添加 api 密钥,然后构建发布所有。
    • 我已经解决了我的问题...你可以检查我的答案以备将来参考
    【解决方案4】:

    您需要获取 SHA1 密钥才能制作谷歌地图应用程序。因此请访问 Google Developer Console 。 这是链接,您可以参考获取它 https://developers.google.com/console/help/new/#installed_applications

    【讨论】:

    • 我已经解决了我的问题...你可以检查我的答案以备将来参考
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多