Google Maps Android V2 - 空白屏幕

5

我正在为Android实现谷歌地图。我创建了一个测试应用程序,并在该应用程序中插入了所有的权限等,应用程序运行得非常好。

但是当我尝试将相同的代码复制到我的真实应用程序中时,在Android活动中显示一个空白屏幕。尽管我已经在谷歌API控制台中更新了包名称。

这是我的测试项目清单:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mapstutorial"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="17" />

<permission
    android:name="com.example.mapstutorial.permission.MAPS_RECEIVE"
    android:protectionLevel="signature"/>
<uses-permission android:name="com.example.mapstutorial.permission.MAPS_RECEIVE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>

<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true"/>

<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
<uses-library android:name="com.google.android.maps" />
    <meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="my api key"/>

    <activity
        android:name="com.example.mapstutorial.MainActivity"
        android:label="@string/app_name" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

</manifest>

这是我的实际项目清单:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.shop.shoppinglist"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="17" />

<permission      android:name="com.shop.addtask.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>
<permission      android:name="com.shop.shoppinglist.permission.C2D_MESSAGE"    android:protectionLevel="signature" />

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.shop.addtask.permission.MAPS_RECEIVE"/>
<uses-permission android:name="com.shop.shoppinglist.permission.C2D_MESSAGE" />

<uses-feature
    android:glEsVersion="0x00020000"
    android:required="true"/>

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

    <uses-library android:name="com.google.android.maps"/>
    <meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="my api key"/>

    <activity
        android:name=".Login_Activity"
        android:label="@string/title_activity_main" 
        android:theme="@style/Theme.Sherlock" 
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>

我在控制台指纹中更新了包名为com.shop.addtask,但仍然显示白屏。可能是什么原因呢? 我使用的apikey在两个应用程序中相同。但是它可以在测试应用程序上使用,而在真正的应用程序上无法使用。

  • 我已使用指纹创建了 API 密钥
  • 我已在控制台上启用了 Google Maps Android v2
  • 我正在使用控制台中提到的相同 API 密钥。

所以这些都是正确的,问题不可能是由其中一个引起的。


你是否遇到了任何错误?如果是的话,我们能看到堆栈跟踪吗? - Rarw
@kaya 我也从控制台中删除了 Android 密钥,重新生成了 SHA1 并在控制台中创建了一个新的密钥,使用该 SHA1 获取了 API 密钥并使用它,但仍然得到相同的结果。 - Mj1992
@Rarw 我唯一看到的红线是这个:无法找到类'maps.i.k',从方法maps.z.ag.a引用 - Mj1992
8个回答

6

可能有两个原因:

1. 这部分内容:

 <uses-library android:name="com.google.android.maps"/>
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="my api key"/>

应该在闭合的application标签之前添加。

2. 很可能您的密钥存在某些问题。尝试通过删除debug.keystore文件夹并运行项目来生成新密钥,然后通过控制台重新注册。

您可以使用我编写的此指南:

Google Map API V2 key

更新:

请再次检查此内容:

<permission      android:name="com.shop.addtask.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>

看起来你设置的包不是你应用程序的包,应该是:

  <uses-permission android:name="com.shop.shoppinglist.permission.MAPS_RECEIVE"/>
  <permission      android:name="com.shop.shoppinglist.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>

我删除了debug.keystore文件,然后按照所有步骤获取了新的API密钥和指纹。但是仍然出现相同的错误。 - Mj1992
MapActivity位于com.shop.addtask包中,这就是为什么我给出了上述的包名。 - Mj1992
这个修复方案对你有用吗? - Emil Adz
是的,问题出在包名上,已经解决了,谢谢。 - Mj1992
太好了 : ) 祝你编程愉快。 - Emil Adz
在搜索了数小时后,结果发现我的 debug.keystore 文件可能已经损坏了。第二步解决了我的问题。谢谢! - Reafidy

1

我的问题是我在AndroidManifest文件中更改了应用程序的包名,但没有更改gradle.build的“applicationId”属性,也许这可以帮助某些人...


1

当一切失败时,请尝试卸载应用并再次尝试。在我的情况下,这样做起作用了。


1
<permission      android:name="com.shop.addtask.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>
<uses-permission android:name="com.shop.addtask.permission.MAPS_RECEIVE"/>

包名是:
package="com.shop.shoppinglist"

希望以下链接能够帮到你,Google Maps Android API v2的AndroidManifest.xml
请尝试这个。
<permission      android:name="com.shop.shoppinglist.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>
<uses-permission android:name="com.shop.shoppinglist.permission.MAPS_RECEIVE"/>

0

好的,我有同样的问题,我按照博客和谷歌官方页面上的所有步骤操作,但仍然无法解决。正确的解决方案是在关闭应用程序标签之前添加以下代码:
<uses-library android:name="com.google.android.maps"/>
<meta-data android:name="com.google.android.maps.v2.API_KEY" android:value="我的API密钥"/>
但在另一种情况下,我找到了解决方案,问题是我在Macintosh上生成了SHA1代码,但我克隆了存储库并在Windows平台上工作,但我发现了这个问题,我的解决方案是去Google控制台并生成其他API密钥,但使用以下命令在Windows中获取SHA1代码,在控制台中打开并输入以下代码:
cd C:\Program Files\Java\jre1.8.0_20\bin 并按回车键
下一步复制并粘贴此代码

keytool -list -v -keystore %HOMEPATH%\.android\debug.keystore -alias androiddebugkey -storepass android -keypass android

在控制台中按回车键后,您将会看到 SHA1 代码,请复制并粘贴到 Google 控制台中,非常重要的是指定 SHA1 代码“;”,以及正确的包名。

祝好!


1
欢迎来到StackOverflow。您必须先访问帮助中心。尝试使您的代码更易读一些。 :) - afzalex

0

我遇到了一个类似的地图问题。在解决了所有库和密钥问题后,我只看到一个标有“Google”的白屏。 问题是,我把MapFragment放进了一个ScrollView中。移除ScrollView后一切正常,我可以看到地图。


0

我曾经遇到过同样的问题。我尝试了所有在不同解决方案中提出的建议,包括重新创建我的API密钥(包括创建一个新项目),但都没有起作用。在浪费了很多很多小时之后,我决定删除我Android设备上所有myapp用户数据,神奇地解决了这个问题。我的地图正确显示了!太好了!!!

Android 4.2.2:设置/应用程序/YourApp/清除数据。

希望这个简单的解决方案能在其他方法都失败时有所帮助。


0

检查您是否启用了Google Maps Android API

  • 打开Google地图开发者控制台。
  • 进入库 -> Google Maps Android APIs
  • 如果它被禁用,请启用它。 输入图像描述

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接