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,它可以正常工作。
答案 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分钟即可正常工作。