安卓谷歌地图API V2空白屏幕

25

你好,最近我按照Vogella的Google Map API v2教程编写了代码,与他的代码类似。但是出现了地图显示为空白,而logcat中也没有错误信息。我还按照这个视频去获取SHA1指纹,然后将API密钥放入清单文件中。我使用的是调试keystore C:\Users\UserName.android\debug.keystore,它也是Eclipse -> Windows -> Preference -> Android -> Build中默认的调试keystore。

我还生成了一个新的API密钥,但仍然不起作用。

清单文件:

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

    <uses-sdk
        android:minSdkVersion="11"
        android:targetSdkVersion="15" />

    <permission
        android:name="com.example.mapdemo.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />
    <uses-feature android:name="android.hardware.camera" />
    <uses-feature android:name="android.hardware.camera.autofocus" />
    <uses-feature android:name="android.hardware.camera.flash" />

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <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="android.permission.SET_DEBUG_APP"></uses-permission>
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".HomeActivity"
            android:label="@string/title_activity_home" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

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

        </activity>
        <activity android:name=".ScanActivity"/>
        <activity android:name=".MapActivity"/>
        <activity android:name=".BarcodeHelper"/>
        <activity android:name=".JsonHelper"/>

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

</manifest>

这是我为地图活动创建的布局文件:

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MapActivity" >

        <fragment
        android:id="@+id/map"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        class="com.google.android.gms.maps.MapFragment" />

</RelativeLayout>
public class MapActivity extends Activity 
{
    //定义经纬度
    static final LatLng HAMBURG = new LatLng(53.558, 9.927);
    static final LatLng KIEL = new LatLng(53.551, 9.993);

    private GoogleMap map;

    @Override
    protected void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_map);

        //获取地图控件
        map = ((MapFragment) getFragmentManager().findFragmentById(R.id.map)).getMap();

        //添加标记
        Marker hamburg = map.addMarker(new MarkerOptions()
            .position(HAMBURG)
            .title("Hamburg"));

        Marker kiel = map.addMarker(new MarkerOptions()
            .position(KIEL)
            .title("Kiel")
            .snippet("Kiel is cool") //在信息窗口中添加文本
            .icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_launcher))); //设置标记图标
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) 
    {
        //加载菜单布局
        getMenuInflater().inflate(R.menu.activity_map, menu);

        return true;
    }
}

你正在使用真实设备进行测试吗? - iagreen
你在谷歌上启用了该服务吗? - Fred
是的,我正在真实设备Galaxy S3上进行测试,并且我还在Google API控制台上激活了API。 - user1832478
13个回答

28

您的清单文件存在几个权限问题。首先,在以下内容中,您需要将包名替换为您自己的包名,并添加一个uses-permission


 <permission
        android:name="com.example.mapdemo.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

根据您的软件包名称,应该是--

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

最后,您似乎缺少了指定权限部分和入门指南中的以下权限 --

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>

10

对我来说,结果是我没有启用Google Maps Android API v2。我们正在使用另一个Google Maps API,我认为它是一样的。


2
我需要在Google开发者控制台中添加正确的SHA-1证书指纹。
以下是步骤:
  1. 显示当前指纹:keytool -list -keystore ~/.android/debug.keystore

  2. 复制指纹(例如48:6F:55:B7:C5:E4:54:E1:29:D5:E1:E1:E2:A8

  3. 将其添加到特定应用程序的凭据中,在Google开发者控制台中。


2
如果没有解决问题,请按照以下步骤解决地图上的空白屏幕问题:
嗨,我已经经历了很长时间的空白屏幕,并尝试了所有您能想象到的解决方案。现在它已经解决了,步骤如下:
1-仔细阅读此教程中的所有步骤。
2-如果空白屏幕仍然存在,请删除位于c:\Users\youUser.android\debug.keystore中的调试密钥存储文件 <-- 删除此文件
3-在eClips IDE上重新构建您的应用程序,以便自动重新创建此文件。 4-在eclips中转到Window-->preferences-->android-->Build,复制新生成的SHA1,然后按照正常的密钥生成步骤进行操作。 5-在您的真实设备上运行,希望您能看到地图 :)

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

0

0

您必须在具有以下配置的模拟器中运行应用程序... 1)Google API(x86系统映像) 2)选择指示使用主机GPU的复选框。


0

将自定义密钥设置为与默认密钥(Eclipse)相同。并按照文档中所述在Google控制台中注册API密钥。


0
在我的情况下,我克隆了一个现有的应用程序,没有更改API密钥。对我有效的方法是启用我的签名证书的SHA-1。按照这些简短的说明获取SHA-1指纹。
然后,我让主要开发人员将我的SHA-1指纹添加到他相关API密钥的授权包此处。然后我以同样的方式再次构建,它就可以工作了。

0
请确认您的 API 密钥是否正确。您还可以尝试从 API 密钥中移除限制。

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