Google地图是空白的。由于身份验证而无法加载。出于选择

时间:2014-10-14 10:30:15

标签: java android google-maps android-studio google-maps-android-api-2

我正在构建一个包含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)向任何帮助我解决此问题的人发送啤酒。

谢谢!

0 个答案:

没有答案