2014-01-08 38 views
0

谷歌地图正在一个已发布的应用程序,现在由于某种原因,它刚刚停止显示地图。这里是清单:谷歌地图Android API v2停止工作

<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的密钥和释放店,并把它们放在谷歌地图Android的API V2和已经放在API密钥清单(硬编码和strings.xml)。

这里的布局:

<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服务库项目,并且都指向Support Library v4。即使是清单也有相同的条目。另外,如果我用MapFragment替换SupportMapFragment,它就可以正常工作。

+0

什么在logcat的? –

+0

downvoter请发表评论我的回答 –

+0

在logcat的 –

回答

2

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

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

可能是版本不与您的谷歌播放服务工作版本(你可以在谷歌赏玩services_lib赤实际版本>水库>值> version.xml) 。检查你正在使用的jar是否正是该版本,如果不是,则更改它。此外,如果您检查日志的猫,你可以看到类似

产生的原因:java.lang.IllegalStateException:在您的 应用的AndroidManifest.xml的元数据标签没有正确的价值。

我愿意元数据更改为

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

那是什么google recommends也跟随其他建议INT该页面

不管怎么说,如果你看一看logcat的(或交它在这里)可能我们可以得到围绕setUpMapIfNeeded()

+0

没什么,我觉得你的回答是有用的,我upvoted它来平衡这种不公平。 –

+0

感谢@ErnirErlingsson –

+0

谢谢卡洛斯,我作出改变,但它并没有帮助。我看过Logcat,那里什么都没有。这就是为什么我正在为此而苦苦挣扎。我将创建一个全新的项目,以查看它是关键相关还是代码相关。 –

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"/> 
+0

我尝试了两种方法,但没有任何区别。 –

+0

可以肯定的是,请注意,您的任务是android:name =“com.google.android.gms.maps.SupportMapFragment”,但我上面粘贴的是class =“com.google.android.gms.maps.SupportMapFragment” –

+0

最后一件事,请查看http://stackoverflow.com/questions/15403961/google-maps-android-api-supportmapfragment-vs-mapfragment。 –

0

你可能检查大部分东西已经(像我一样)。 我的地图与调试密钥库完美配合,但在切换到签名密钥时变为空白。 当我在一个谷歌帐户创建API密钥(与调试键+项目包的名称)在开发阶段使用.... 和我创建了另一个签名API金钥(密钥库签订项目+包名称)我的问题解决了另一个谷歌帐户。 显然,对于相同的包名(即使密钥库不同!)在同一个Google帐户上不能有多个API密钥。