谷歌地图API v2在设备上无法显示地图

23

我正在运行Google地图API v2(https://developers.google.com/maps/documentation/android/start#specify_settings_in_the_application_manifest)提供的示例代码。

代码成功运行,但设备上未加载地图。设备上仅显示白屏。我正在使用4.0.3版本的Android设备。

enter image description here

1)我已为该项目启用服务。

enter image description here

2)生成的密钥:

enter image description here

enter image description here

3)将“google-play-services_lib”作为项目中的库:

enter image description here

4)Android清单文件:

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

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

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

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

    <uses-permission android:name="com.example.mapdemo.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-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

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

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="AIzaSyCvZrhQ8YBfyYBvTic3DSdu2O06nAmhpg4" />

        <activity
            android:name="com.example.mapdemo.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>

5) 活动:

package com.example.mapdemo;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;

public class MainActivity extends Activity  {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);      
    }
    @Override
    public boolean onCreateOptionsMenu(Menu menu) {

        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }
}

6) 布局:

<?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"/>

1
我也很困惑,似乎我在API控制台中输入的包名不完整。即使重新安装地图仍然没有显示。但是我只需要等待几分钟 - 由于某种原因,第一次花费了很长时间。 - User
只是出于好奇 - 你是怎么弄清楚权限的呢?我已经阅读了谷歌文档,它只说需要INTERNET、ACCESS_NETWORK_STATE、WRITE_EXTERNAL_STORAGE权限,以及可选的ACCESS_COARSE_LOCATION和ACCESS_FINE_LOCATION权限......那么MAPS_RECEIVE和READ_GSERVICES又是从哪里来的呢? - Chris
6个回答

14

使用 FragmentActivity

例如:

public class Maps extends FragmentActivity {
    GoogleMap map;
    double lat;
    double lan;
    boolean flag = false;

    // private LocationManager lm;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mapptry);

        map = ((SupportMapFragment) getSupportFragmentManager()
                .findFragmentById(R.id.map)).getMap();
                 }
  }

将您的map.xml更改为

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

编辑

还需要做这个:

导入android.support.v4.app.FragmentActivity;

在执行之前,右键单击项目->属性->构建路径->Java构建路径->库.. 然后点击添加外部JAR

然后转到

user\android-sdks\extras\android\support\v4

选择android-support-v4.jar

注意:请确保你的API密钥是正确的,否则它将仅显示一个空白屏幕。


不要像你在@vinidog发布问题时那样暴露你的API KEY,这在这里不是好的做法。你可能需要更新一下。 - Akah
是的,我的 API 密钥无效了,我重新生成了密钥,现在它可以工作了。 - ashishdhiman2007

3
尝试添加。
GoogleMap googleMap =    ((MapFragment)getFragmentManager().findFragmentById(R.id.map)).getMap();

将你的xml替换为
<?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"
/>

您已将以下代码添加到应用程序标签外部,而应该将其放在标签内部。
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />

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

希望这篇文章能帮助到那些遇到同样问题的人。

1
也许这个问题与API密钥有关,或者您只需在项目API控制台(https://console.developers.google.com/project)中检查您的SHA1指纹和您的eclipse Windows -> Preferences -> Android -> Build是否相同,否则只需将控制台中的SHA1更新到构建路径或反之亦然。

0
如果有人和我一样蠢,请确保你测试的设备已连接到WiFi...

0

当你确保以下事项时,你的问题很可能会得到解决:

  1. 激活Google地图API

  2. 在生成API密钥时使用正确的包名(在我的情况下,这是错误的)... 这似乎也是你的问题,因为包名似乎是错误的(com.example.mapdemo)

  3. 确保你正在使用正确的密钥库文件来生成SHA1

希望这对你有所帮助。


0

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