我正在构建一个包含Google地图片段的应用。无论我做什么,地图都显示为空白,出现以下错误:
5372-5648 / com.fourbox.bocterapp E / Google Maps Android API:无法加载地图。联系Google服务器时出错这可能是一个身份验证问题(但可能是由于网络错误)。
我已经阅读了互联网上几乎所有可能的指南,使用谷歌地图,几乎每个关于这个问题的堆栈溢出问题,我都没有选择。
我可以向你保证:
我已经使用Eclipse,使用带有keytool的CMD以及使用Android Studio导出已签名的密钥库,生成并重新生成了SHA-1指纹数十次。每次重新生成API密钥后,我都清除了我的应用程序中的数据,重新安装了应用程序,以便我可以阻止以前密钥的残留。
已启用Google Maps API Android V2。
我正在使用Android Studio。这是build.gradle文件:
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath 'com.android.tools.build:gradle:0.12.+'
}
}
apply plugin: 'android'
dependencies {
compile fileTree(include: '*.jar', dir: 'libs')
compile 'com.google.android.gms:play-services:5.0.89'
compile 'com.android.support:appcompat-v7:20.+'
compile files('libs/Parse-1.7.0/Parse-1.7.0.jar')
}
android {
signingConfigs {
config {
storeFile file('C:/bocterapp.keystore')
}
}
compileSdkVersion 20
buildToolsVersion "20.0.0"
sourceSets {
main {
manifest.srcFile 'AndroidManifest.xml'
java.srcDirs = ['src']
resources.srcDirs = ['src']
aidl.srcDirs = ['src']
renderscript.srcDirs = ['src']
res.srcDirs = ['res']
assets.srcDirs = ['assets']
}
// Move the tests to tests/java, tests/res, etc...
instrumentTest.setRoot('tests')
// Move the build types to build-types/<type>
// For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ...
// This moves them out of them default location under src/<type>/... which would
// conflict with src/ being used by the main source set.
// Adding new build types or product flavors should be accompanied
// by a similar customization.
debug.setRoot('build-types/debug')
release.setRoot('build-types/release')
}
dexOptions {
preDexLibraries = false
}
}
这是Android.Manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.fourbox.bocterapp"
android:versionCode="1"
android:versionName="1.0" >
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
android:maxSdkVersion="18" />
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- 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-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="com.fourbox.bocterapp.permission.MAPS_RECEIVE"/>
<permission android:name="com.fourbox.bocterapp.permission.MAPS_RECEIVE" android:protectionLevel="signature"/>
<!--
vIMPORTANT: Change "com.parse.tutorials.pushnotifications.permission.C2D_MESSAGE" in the lines below
to match your app's package name + ".permission.C2D_MESSAGE".
-->
<permission android:protectionLevel="signature"
android:name="com.fourbox.bocterapp.permission.C2D_MESSAGE" />
<uses-permission android:name="com.fourbox.bocterapp.permission.C2D_MESSAGE" />
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
<uses-sdk
android:minSdkVersion="11"
android:targetSdkVersion="22" />
<application
android:allowBackup="true"
android:icon="@drawable/bocterapp"
android:theme="@style/AppTheme" >
<uses-library android:name="com.google.android.maps"/>
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="********"
/>
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />
<activity
android:name="com.fourbox.bocterapp.MainPage"
android:label=""
android:configChanges="orientation"
android:screenOrientation="portrait"
android:allowTaskReparenting="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name="com.fourbox.bocterapp.AddAlert"
android:allowTaskReparenting="true"
android:configChanges="orientation"
android:screenOrientation="portrait">
</activity>
<activity
android:name="com.fourbox.bocterapp.RecentSightings"
android:label=""
android:configChanges="orientation"
android:screenOrientation="portrait"
android:allowTaskReparenting="true">
</activity>
<activity
android:name="com.fourbox.bocterapp.AlertViewOnMap"
android:label=""
android:configChanges="orientation"
android:screenOrientation="portrait"
android:allowTaskReparenting="true">
</activity>
<activity
android:name="com.fourbox.bocterapp.Settings"
android:label=""
android:configChanges="orientation"
android:screenOrientation="portrait"
android:allowTaskReparenting="true">
</activity>
<service android:name="com.parse.PushService" />
<receiver android:name="com.parse.ParseBroadcastReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.USER_PRESENT" />
</intent-filter>
</receiver>
<receiver android:name="com.parse.GcmBroadcastReceiver"
android:permission="com.google.android.c2dm.permission.SEND">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<!--
IMPORTANT: Change "com.parse.tutorials.pushnotifications" to match your app's package name.
-->
<category android:name="com.fourbox.bocterapp" />
</intent-filter>
</receiver>
</application>
</manifest>
这是我使用地图片段的代码:
package com.fourbox.bocterapp;
import android.app.Activity;
import android.os.Bundle;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.MapFragment;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.MarkerOptions;
public class AlertViewOnMap extends Activity {
public int busNumber;
public double coordinatesLongitude;
public double coordinatesLatitude;
public String description;
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
this.setContentView(com.fourbox.bocterapp.R.layout.details_design);
busNumber = getIntent().getIntExtra("busNumber", 0);
description = getIntent().getStringExtra("description");
coordinatesLatitude = getIntent().getDoubleExtra("coordinatesLatitude", 0);
coordinatesLongitude = getIntent().getDoubleExtra("coordinatesLongitude", 0);
GoogleMap mMap;
mMap = ((MapFragment) getFragmentManager().findFragmentById(com.fourbox.bocterapp.R.id.mapFragment)).getMap();
mMap.addMarker(new MarkerOptions()
.position(new LatLng(coordinatesLatitude, coordinatesLongitude))
.title(description));
}
}
这是我的details_design.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_alignParentBottom="false"
android:layout_alignParentLeft="true"
android:layout_alignParentRight="true"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="false"
android:layout_centerInParent="false"
android:layout_centerVertical="false"
android:orientation="vertical"
android:weightSum="1">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<ImageView
android:id="@+id/imageViewAlertList"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.20"
android:src="@drawable/ellipse103" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.60"
android:orientation="vertical" >
<TextView
android:id="@+id/textViewAlertTime"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="0.20"
android:hint="Test minutes ago"
android:textAppearance="?android:attr/textAppearanceSmall" />
<TextView
android:id="@+id/textViewAlertDescription"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="0.80"
android:textAppearance="?android:attr/textAppearanceLarge" />
</LinearLayout>
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="0.20"
android:orientation="vertical" >
<TextView
android:id="@+id/textViewAlertBusNumberLabel"
android:layout_width="wrap_content"
android:layout_weight="0.20"
android:layout_height="0dp"
android:hint="@string/busNo"
android:textAppearance="?android:attr/textAppearanceSmall"
/>
<TextView
android:id="@+id/textViewAlertBusNumber"
android:layout_width="wrap_content"
android:layout_weight="0.80"
android:layout_height="0dp"
android:textAppearance="?android:attr/textAppearanceLarge"
/>
</LinearLayout>
</LinearLayout>
<fragment
android:layout_width="match_parent"
android:layout_height="match_parent"
android:name="com.google.android.gms.maps.MapFragment"
android:id="@+id/mapFragment"
android:layout_gravity="center_horizontal" />
</LinearLayout>
请帮帮我!我不知道该怎么做,我在这里呆了4天,阅读了我在这个主题上所能找到的一切。
万能的程序员,请帮助我!我将通过电子邮件(hehe)向任何帮助我解决此问题的人发送啤酒。
谢谢!