Google Maps Android API v2已停止运行

时间:2014-01-08 17:43:13

标签: android google-maps google-maps-android-api-2

Google地图正在处理已发布的应用,现在出于某种原因,它已停止显示地图。这是清单:

<manifest 

.....

<permission
    android:name="com.x.x.permission.MAPS_RECEIVE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.x.x.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />


<!-- Maps API needs OpenGL ES 2.0. -->
<uses-feature android:glEsVersion="0x00020000" android:required="true" />

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name">

    .....

    <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="@string/map_key" />

    <meta-data
        android:name="com.google.android.gms.version"
        android:value="4030500" />

</application>

我从调试和发布商店获得了调试和发布SHA-1密钥,并将它们放在Google Maps Android API V2上,并将API密钥放入清单(硬编码和strings.xml)。 / p>

这是布局:

<fragment 
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.SupportMapFragment"/>

以下是我尝试从显示的片段访问SupportMapFragment的方法:

    private void setUpMapIfNeeded() 
{
        SupportMapFragment fragment = (SupportMapFragment)fManager.findFragmentById(R.id.map);
        if (fragment != null) 
        {
            mMap = fragment.getMap();
        }

        // Check if we were successful in obtaining the map.
        if (mMap != null)
            setUpMap();
}

但是片段始终返回null。有一次我得到了失败的授权消息,但目前我没有看到。只有一张空白地图。

更新 它似乎不是键的问题,它与

有关
  android:name="com.google.android.gms.maps.SupportMapFragment"

在布局文件中。当我尝试通过id获取片段时,它返回null。令人沮丧的是,我创建了一个测试项目,其中设置基本相同并且有效。然而,当我在这个项目中尝试相同的代码时,它无法正常工作。这两个项目都指向同一个Google Play服务库项目,他们都指向支持库v4。即使清单也有相同的条目。另外,如果我用MapFragment替换SupportMapFragment,它可以正常工作。

5 个答案:

答案 0 :(得分:3)

如果一切都相同(你没有更改软件包名称或密钥,并且你正在使用debug sha1作为debug api密钥,),并且它停止工作,我会说你与播放服务的版本。 尝试删除这里的硬编码版本

 <meta-data
            android:name="com.google.android.gms.version"
            android:value="4030500" />

可能该版本不适用于您的Google Play服务版本(您可以在 google-play-services_lib&gt; res&gt;值&gt; version.xml 中查看实际版本)。检查您使用的jar是否正好是该版本,如果不是,请更改它。此外,如果您检查日志猫,您可以看到类似

的内容
  

引起:java.lang.IllegalStateException:您的元数据标记   app的AndroidManifest.xml没有正确的值。

我会将元数据更改为

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

这就是google recommends,并且也遵循该页面中的其他建议

无论如何,如果你看看logcat(或在这里发布)可能我们可以得到关于setUpMapIfNeeded()的日志的线索

答案 1 :(得分:0)

我不确定为什么它在以前工作时停止工作,但这是解决方案:

SupportMapFragment - Binary xml file line #2: Error inflating class fragment

答案 2 :(得分:0)

根据GoogleMap Android API setup,它说

<?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"
      android:name="com.google.android.gms.maps.MapFragment"/>

这就是我所做的和工作。我自己没有使用过suppotMapFragment,但是从这个链接here开始,该元素似乎是

<fragment
      class="com.google.android.gms.maps.SupportMapFragment"
      android:layout_width="match_parent"
      android:layout_height="match_parent"/>

答案 3 :(得分:0)

你可能已经检查了大部分内容(正如我所做的那样)。 我的地图与调试密钥库完美配合,但在切换到签名密钥时变为空白。 当我在一个谷歌帐户中创建一个Api Key(带有调试密钥+项目包名称)以在开发期间使用时,我的问题得以解决.... 我在另一个谷歌帐户上创建了另一个签名Api密钥(签名密钥库+项目包名称)。 显然,在同一个Google帐户中,同一个软件包名称不能有多个API密钥(即使密钥库不同!)。

答案 4 :(得分:0)

这可能是SHA1证书更改的原因,您需要做的就是获取新的SHA1,并在您的Google控制台中对其进行编辑,并在其中获取Maps API,然后尝试重新生成新的API并赋予它5分钟即可正常工作。