谷歌地图显示在模拟器上,但不在设备上
Posted
技术标签:
【中文标题】谷歌地图显示在模拟器上,但不在设备上【英文标题】:Google Maps showing on emulator, but not on a device 【发布时间】:2016-03-21 09:44:51 【问题描述】:我编写了一个基本的地图应用程序,它可以很容易地用 androidStudio 实例化。片段加载在另一个自定义布局中的唯一区别。
package com.wayl.activities;
import android.os.Bundle;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
import com.wayl.R;
public class MapsActivity extends AppCompatActivity
@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maps);
FragmentManager myFragmentManager = getSupportFragmentManager();
SupportMapFragment mapFragment = (SupportMapFragment) myFragmentManager.findFragmentById(R.id.map);
GoogleMap mMap = mapFragment.getMap();
// Add a marker in Sydney and move the camera
LatLng sydney = new LatLng(-35, 152);
mMap.addMarker(new MarkerOptions().position(sydney).title("Marker near Sidney"));
mMap.moveCamera(CameraUpdateFactory.newLatLng(sydney));
[...]
如上所述,该应用程序在 AVD 中完美运行,但无法使其在真实设备上运行。它只显示一个空的地图占位符,那里还有彩色的 Google 徽标。但是没有标记,没有网格,没有按钮,没有别的。
为什么我认为它应该有效:
网络、wifi都可以,手机上和AVD里一样
The OpenGL version shouldn't be a problem,我在一个 Galaxy Samsung S3,以及 Galaxy Note 4。
我将指纹用于调试和发布版本,使用 keytool 检索并连接到我的密钥库,所以key it's OK,你也可以看到the reference image,即使它这么说是可选的。我把基础包和包含地图活动的包都放了,只是为了确定。
我为the app to fetch the location 等待了足够的时间,并等待指纹传播以防万一。
Manifest 具有检索粗略和精细位置的所有正确权限(请记住,在 AVD 中一切正常)
我过去已经成功地在 Android 上开发过地图。我记得每次在令人沮丧的过程中经过 4 或 5 次试验和错误后,我都能实现它。这一次我不知道该做什么了。我正在开发 S.O.了解我错在哪里。
【问题讨论】:
您能否在您的设备中看到实际的 Google 地图应用程序? @ShylendraMadda 是的,谷歌地图工作正常,并且在我的两部手机(Galaxy S3、Galaxy Notes)上都能正确加载。 所以一旦卸载并安装您的基本应用程序 你在清单中提到过吗:com.google.android.maps.v2.API_KEY
和com.google.android.geo.API_KEY
都试过了,当然API_KEY 是我的密钥。
【参考方案1】:
我终于找到了解决办法。
在新的 AndroidStudio 示例中,带有密钥 (google_maps_api.xml) 的文件已放置到文件夹 app\src\debug\res\values 中,并且app\src\release\res\values中的另一个!
虽然 AndroidStudio 向您显示所有布局、所有值文件等,但只有一个带有密钥的值文件,所以我没有注意到文件系统中实际上有两个文件,一个没有设置密钥!我什至现在都没有可能有不同的文件夹。
我为此苦苦挣扎了几天。每次我尝试创建一个简单的地图时都会发生这种情况,发生一些变化,弹出窗口让我浪费时间。当您找到解决方案时,一切似乎都那么明显,但同时又令人沮丧。
感谢大家的帮助!我真的很感激。
【讨论】:
【参考方案2】:您必须检查您尝试在设备上安装的应用。它应该使用发布密钥签名(而模拟器使用调试密钥)!
【讨论】:
你好@ksenia。感谢您的回答,但是,发布的应用程序已经使用发布密钥签名(即,来自 AndroidStudio:Build>Generate Signed APK)。释放密钥已用于检索图像中的 SHA 指纹(第二对)。我还让您注意,我停用 proguard(设置为 false)只是为了消除一些可能的错误原因。 您是否将发布密钥指纹添加到您的 Google 开发者帐户并在您的项目中进行了更改? @SandroScarano,您确定(在 AndroidStudio 中:Build>Generate Signed APK)在下拉列表“Build Type”中的值为“release”,而不是“debug”? @RexSplode 是的,除非我遗漏了什么是我所做的,如答案第三点和上面评论中解释的步骤。 @Ksenia 是的,它是作为“发布”构建的,我总是执行这些步骤来在我的手机上试用该应用程序,也在商店发布之前。无论如何,我仔细检查了。以上是关于谷歌地图显示在模拟器上,但不在设备上的主要内容,如果未能解决你的问题,请参考以下文章
无法使用谷歌地图 API JS 在英特尔 xdk 中看到谷歌地图