在版本2中,地图视图不显示地图

时间:2013-05-15 12:05:10

标签: android google-maps android-maps-v2

地图活动没有显示地图,它显示为带有缩放控制按钮的白色屏幕。 清单文件如下:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.demomap"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
        android:minSdkVersion="8"
        android:targetSdkVersion="17" />
   <permission
        android:name="com.example.demomap.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />
    <uses-permission android:name="com.example.demomap.permission.MAPS_RECEIVE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <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" >
        <activity
            android:name="com.example.demomap.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>

        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="AIzaSyCTQZOcXFS3RpNSVe79HHN1xojat-2MbT4" />
    </application>
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true" />
</manifest>

我的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"
    class="com.google.android.gms.maps.SupportMapFragment" />

Log Cat错误:

05-15 17:15:16.255: E/Google Maps Android API(26201): Failed to load map. Error contacting Google servers. This is probably an authentication issue (but could be due to network errors).

请帮助我。

19 个答案:

答案 0 :(得分:40)

也许关键不正确。您可以尝试以下方法:

  • 请务必输入正确的套餐名称,例如this
  • 在更新最新Google Play的真实设备上进行测试。或者使用this guide
  • 的模拟器
  • 主动谷歌地图api v2 for android google console site enter image description here

答案 1 :(得分:17)

我使用MapView

遇到了这个问题

fragment_map.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">

<com.google.android.gms.maps.MapView
    android:id="@+id/mapview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"/>

    @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
    String message = getArguments().getString(EXTRA_MESSAGE);
    v = inflater.inflate(R.layout.map_f, container, false);
    vh = new ViewHolder();
    assetHandler = new AssetHandler(getActivity());
    vh.mapView=assetHandler.mapViewHandler.set(v,R.id.mapview);
    vh.mapView.onCreate(savedInstanceState);

    vh.mapView.getMapAsync(new OnMapReadyCallback() {
        @Override
        public void onMapReady(GoogleMap googleMap) {
            googleMap.getUiSettings().setMyLocationButtonEnabled(true);
            googleMap.setMyLocationEnabled(true);
            // Needs to call MapsInitializer before doing any CameraUpdateFactory calls
            try {
                MapsInitializer.initialize(getActivity());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
    return v;
}


@Override
public void onResume() {
    super.onResume();
    vh.mapView.onResume();


}

@Override
public void onPause() {
    vh.mapView.onPause();
    super.onPause();
}

@Override
public void onDestroy() {
    vh.mapView.onDestroy();
    super.onDestroy();
}

@Override
public void onLowMemory() {
    super.onLowMemory();
    vh.mapView.onLowMemory();
}

我注意到如果没有实现LifeCycle方法,你也将无法看到地图。希望这对某些人有希望。

答案 2 :(得分:6)

问题很多时候是因为没有在清单中的权限中添加Google服务支持:

检查您的清单中是否存在此权限:

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

答案 3 :(得分:6)

我更改了包名并更新了控制台。我有一切正确(清单中正确的SHA1密钥,包名称和API密钥)但仍然得到相同的错误消息。

我不得不卸载应用并重启手机以解决问题。似乎有些东西被缓存了。

答案 4 :(得分:3)

如前所述,此问题通常源于您未正确引用google-play-service库。请查看以下指南的前3个步骤我没有在您的应用程序中集成G​​oogle地图并确保您正确执行所有步骤:

Google Maps API V2

答案 5 :(得分:3)

我遇到了和你一样的问题,但当我注意到我没有在创建新应用程序时提到API密钥中的软件包名称时我解决了它/////你必须在API谷歌控制台中检查它

  

<强> must be the same package name at the console and the one in your eclipse.

希望对你有所帮助。

答案 6 :(得分:2)

我的建议是你可以使用MapFragment。据我所知,几乎所有设备都升级到11及以上。 MapFragment支持11及以上版本。 再次登录google api控制台,检查您的应用程序密钥是否存在。我知道你已经做到了。但请再次检查。因为我遇到了api密钥没有被保存的问题。我每次都要创建一个新项目。也许你也面临同样的问题。

答案 7 :(得分:2)

我在这个错误上花了几个小时。我最初没有正确设置调试密钥库API密钥,我的Android设备缓存了硬编码到我的清单中的错误API密钥。最后,我只是从设备中删除了应用程序,清理了项目,这清除了本地存储在设备上的任何残留API密钥。我再次运行应用程序,一切都像魅力一样!

祝你好运。

答案 8 :(得分:1)

有两种类型签名和未签名的apk。如果您的apk已签名,那么您想使用发布密钥。如果您使用调试密钥并签署了apk,它将无法正常工作。所以在导出apk并检入真实设备时使用释放键。在本文档中,https://developers.google.com/maps/documentation/android/start#the_google_maps_api_key已经给出了。显示发布证书指纹。

答案 9 :(得分:1)

这是99%的密钥库问题。

1)我用于发布和调试相同的文件debug.keystore,我将其从C:/Users/EEfimenko/.android/debug.keystore复制到C:\ Users \ EEfimenko \ Android \ MyApp \ app文件夹以进行访问直接喜欢'debug.keystore'而没有“C:/ Users / ...”链接

2)然后我在'android {'中的build.gradle(Module:app)文件中添加指向它的内容: signingConfigs { debug { storeFile file('debug.keystore') } release { storeFile file('debug.keystore') } }

3)从C:\ Users \ EEfimenko \ Android \ MyApp \ app文件夹中的cmd运行“keytool -list -v -keystore debug.keystore”命令,并将得到的SHA1指纹与applet的名称混合:FR:TY:CG ..... YF:ER; com.myapp.nameofit

4)然后我转到https://code.google.com/apis/console/b/0/?noredirect

a)服务并启用“Google Maps Android API v2”到ON状态

b)把FR:TY:CG ..... YF:ER; com.myapp.nameofit在“API Access”中创建新的Android Key

现在你可以像开头一样再次看到你的地图,而不用钥匙!:)

答案 10 :(得分:1)

如果您使用的是为debug.keystore创建的API密钥,则只有在调试模式下运行应用程序时才会呈现地图。确保你这样做。

答案 11 :(得分:0)

我有同样的问题,通过将其添加到清单文件来解决。

 <meta-data
            android:name="com.google.android.geo.API_KEY"
            android:value="google_maps_key" />

  
        <uses-library
            android:name="org.apache.http.legacy"
            android:required="false" />

答案 12 :(得分:0)

你需要使用相同的sh1签署你的apk,它在google api控制台上注册相同的应用程序包名称,并在google api控制台上的地图v2服务上,确保用相同的sh1分发debug.keystore签名你的apk然后在真实设备上测试它会像魅力一样工作。

答案 13 :(得分:0)

我只花了很多时间。事实证明我的磁盘上有一个不同的debug.keystore(搜索以确保你使用正确的)。此外,如果您收到此错误,请让应用程序运行一段时间。当我在Google API访问中添加正确的SHA1 /应用程序时,我再次收到错误,当我突然阅读一些文档时,地图出现了。可能需要1-2分钟。

答案 14 :(得分:0)

除了上面提到的要检查的项目之外 - 我在eclipse之外生成了SHA1键。然后我将我的项目移动到eclipse(我正在尝试android studio)并且eclipse自动生成一个新的SHA1密钥,因此我必须基于此生成一个新的API_KEY。

答案 15 :(得分:0)

这就是我做的...... 1)更改了工作区。 2)来自Lance Nanek的网站http://permalink.gmane.org/gmane.comp.handhelds.android.devel/98066,似乎 - 使用新库功能,您不需要在属性的Java Build Path部分中指定您所依赖的Android项目。您可以在属性的Android部分中执行此操作。

等等,在Java Build Path中转到Application Project的属性 - &gt;点击项目 - 选择库并删除它。这解决了我的问题!!

答案 16 :(得分:0)

我遇到了同样的问题,所以我继续在API控制台上创建了一个新密钥。另外,请确保在API控制台上按照说明记录发布密钥:Displaying the release certificate fingerprint

现在对我有用......

答案 17 :(得分:0)

您是否在API控制台中激活了Google地图服务?

答案 18 :(得分:-1)

在我的清单的应用程序标记中添加以下内容之前,我无法让它工作:

<application>
...
   <uses-library android:required="true" android:name="com.google.android.maps" />
...
</application>

希望这有帮助!