【问题标题】:Google maps on Android not working on app but demo is fineAndroid 上的 Google 地图无法在应用程序上运行,但演示很好
【发布时间】:2014-10-02 07:31:54
【问题描述】:

我无法让 Google 地图在我的应用上运行。

我看到一个空白屏幕;没有显示网格,只有 google 徽标和 +/- 缩放按钮。

我做了什么:

  • 我启用了“Google Maps Android API v2”API
  • 我已将我的项目与演示项目一起添加到 Google 控制台上的 API 凭据列表中
  • 我还添加了 Internet、位置、com.google.android.providers.gsf.permission.READ_GSERVICES 所需的权限。
  • 甚至按照某些帖子的建议添加了“MAPS_RECEIVE”权限
  • 还添加了“元数据”google_play_services_version

由于演示工作正常,我将 MultiMapDemoActivity 及其文件复制到我的项目中并尝试打开地图,但无济于事。

该问题可能与this 问题有关。但是,他们似乎根本无法使用地图。

这是我注意到的有趣的一点,我通常会这样:

10-02 12:29:20.376: D/REQUEST(5826): Connection opened to:https://clients4.google.com/glm/mmap/api
10-02 12:29:20.376: D/REQUEST(5826): Open Connection

接下来是:

10-02 12:21:45.361: D/REQUEST(5826): DRD(80): 62|132
10-02 12:21:45.361: D/REQUEST(5826): Close
10-02 12:21:45.361: D/REQUEST(5826): Error processing: com.google.maps.api.android.lib6.b.d@42caa7b8 not retrying
10-02 12:21:45.361: D/REQUEST(5826): Retrying: com.google.maps.api.android.lib6.gmm6.c.a@4296a530
  • 另外,不确定这是否相关,但只要我点击打开地图,或者在地图打开并显示空白视图后点击地图,我就会看到:

      10-02 13:03:32.978: E/DatabaseUtils(15468): Writing exception to parcel
      10-02 13:03:32.978:/DatabaseUtils(15468): java.lang.SecurityException: Permission Denial: get/set setting for user asks to run as user -2 but is calling from user 0; this   
      requires android.permission.INTERACT_ACROSS_USERS_FULL
    

编辑#1

<uses-permission android:name="android.permission.INTERNET" />
<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_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

编辑 #2 此外,声明的包名称是 com.A.B.C(清单);而我项目的活动具有 com.A.B. 的结构。

我已经更新了我的项目结构以匹配清单的结构,但我仍然看到与以前相同的错误,没有任何变化。我真的在海上,因为我不明白这里可能出了什么问题。


我们将不胜感激,感谢您的帮助!

【问题讨论】:

  • 这似乎是一个权限问题。检查您是否拥有清单文件中的所有必要权限。
  • 我在编辑中添加了我项目的权限
  • 我遇到了同样的问题,但我无法让它在调试模式下工作,即未发布的版本。
  • 您是否将地图密钥替换为地图密钥
  • @Gaurav,是的,已经用各种键进行了三次检查和尝试

标签: android google-maps


【解决方案1】:

事实证明,我在这里阅读了有关此问题的 n-1 个问题。最后,在各处不断搜索之后,我偶然发现了@Jack的答案here

基本上,这行:"HttpsURLConnection.setDefaultSSLSocketFactory(...)" 是我代码中的罪魁祸首。我将其注释掉,一切正常。

注意:我还没有尝试保留代码行并对其进行修改以使地图工作。如果我需要/做,我会发表评论。

【讨论】:

  • 2 天搜索答案,然后看到这个!非常感谢!
【解决方案2】:

您需要将您的 SHA1 指纹添加到公共 API 访问权限。 转到 eclipse > 首选项。 Android > 构建并复制您的默认 Eclipse SHA1 指纹。

现在转到https://console.developers.google.com 选择您的应用程序,“API 和身份验证”>“凭据”> 并点击“编辑允许的 android 应用程序”,将您的 SHA1 数字设置为:

XX:XX:XX:XX:XX...XX;com.your.pakage.app

【讨论】:

  • 已经这样做了。事实上,我已经尝试过不同的密钥(并在谷歌的控制台上添加了他们的 SHA1)。问题甚至没有改变。我遇到了和以前一样的问题......
  • 有什么方法可以用 Android Studio 检查 SHA1 吗?
【解决方案3】:

你的谷歌密钥呢? Manifest 文件中的这一行:

<meta-data android:name="com.google.android.maps.v2.API_KEY" ....

我也在不断地与这种行为作斗争。在这种情况下,您要验证的第一件事是您的 debug.keystore 文件中的密钥确实是您在 Google 注册的密钥。当您在本地调试应用程序时将使用此密钥。

但是,请注意,当您发布应用程序时,您将需要另一个密钥库文件。在签名时,您应该创建另一个密钥库,并将其也注册到 Google。

【讨论】:

    【解决方案4】:

    我也遇到了这个问题,我花了好几个小时才解决它,最后我完成了这些步骤,终于成功了!

    • 执行与此处相同的步骤https://developers.google.com/maps/documentation/android/start
    • 如果您正在测试项目,请使用调试证书指纹,而不是在 Play 商店中安装应用时使用的发布证书。
    • 不要忘记添加 Google API 的值并将“API_VALUE”替换为它。

    • 将您的项目构建目标更改为 Google API:Project>properties>android>target.

    希望这会有所帮助..

    【讨论】:

      【解决方案5】:

      根据Google 文档,这些是您需要的权限:

      <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"/>
      <!-- The following two permissions are not required to use
           Google Maps Android API v2, but are recommended. -->
      <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
      <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
      

      我建议你也加入这个:

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

      【讨论】:

      • 我刚刚添加了我拥有的权限,是的,该功能也包括在内
      【解决方案6】:

      在清单文件中添加它们

      <permission
          android:name="xxx.xxxx.xxxx.permission.MAPS_RECEIVE"
          android:protectionLevel="signature" />
      
      
      <uses-permission android:name="xxx.xxxx.xxxx.permission.MAPS_RECEIVE" />
      <uses-permission android:name="xxx.xxxx.xxxx.permission.READ_GSERVICES" />
      

      用你的包名替换xxx.xxxx.xxxx

      【讨论】:

      • 我添加了权限,虽然它在 v2.2 中不应该是必需的。仍然没有改变。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多