Google Map Android Api V2 Sample Code not working

2019-01-17 22:37发布

问题:

I had tried to use the Google Map Sample Code before which was provided in Google_Play_SERVICE/SAMPLE by using all the available options and it showed the below Log.

01-14 17:58:39.773: E/Google Maps Android API(13114): Authorization failure.

It showed me the blank screen for all of the sample Map options.

Now I created a new Project and here is its complete code:-

Activity.java

public class MapActivity extends FragmentActivity
{
    private Context context = this;

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

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

        int result = GooglePlayServicesUtil.isGooglePlayServicesAvailable(context);
        Log.e("Maps", "Result int value::" + result);
        switch (result) {
        case ConnectionResult.SUCCESS:
            Log.e("Maps", "RESULT:: SUCCESS");          
            break;

        case ConnectionResult.DEVELOPER_ERROR:
            Log.e("Maps", "RESULT:: DE");           
            break;

        case ConnectionResult.INTERNAL_ERROR:
            Log.e("Maps", "RESULT:: IE");           
            break;

        case ConnectionResult.INVALID_ACCOUNT:
            Log.e("Maps", "RESULT:: IA");           
            break;

        case ConnectionResult.NETWORK_ERROR:
            Log.e("Maps", "RESULT:: NE");           
            break;

        case ConnectionResult.RESOLUTION_REQUIRED:
            Log.e("Maps", "RESULT:: RR");           
            break;

        case ConnectionResult.SERVICE_DISABLED:
            Log.e("Maps", "RESULT:: SD");           
            break;

        case ConnectionResult.SERVICE_INVALID:
            Log.e("Maps", "RESULT:: SI");           
            break;

        case ConnectionResult.SERVICE_MISSING:
            Log.e("Maps", "RESULT:: SM");           
            break;
        case ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED:
            Log.e("Maps", "RESULT:: SVUR");         
            break;
        case ConnectionResult.SIGN_IN_REQUIRED:
            Log.e("Maps", "RESULT:: SIR");          
            break;      

        default:
            break;
        }
        gMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        gMap.setMyLocationEnabled(true);
        Log.e("Maps", "------EOC-------");
    }
}

activity_map.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"/>

Manifest.xml

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

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

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

    <permission
        android:name="net.dottech.map.permission.MAPS_RECEIVE"
        android:protectionLevel="signature" />

    <uses-permission android:name="net.dottech.map.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="net.dottech.map.MapActivity"
            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="removed" />
    </application>

</manifest>

LOG

01-21 13:09:09.243: E/Maps(449): Result int value::0
01-21 13:09:09.243: E/Maps(449): RESULT:: SUCCESS
01-21 13:09:09.243: E/Maps(449): ------EOC-------
01-21 13:09:09.248: D/LocationManagerService(1852): gps location requested by an application
01-21 13:09:09.253: D/SensorManager(449): registerListener :: handle = 0  name= K3DH 
Acceleration Sensor delay= 20000 Listener= maps.i.a@41a054f8
01-21 13:09:09.353: D/(449): Device driver API match
01-21 13:09:09.353: D/(449): Device driver API version: 10
01-21 13:09:09.353: D/(449): User space API version: 10 
01-21 13:09:09.353: D/(449): mali: REVISION=Linux-r2p4-02rel0 BUILD_DATE=Fri May  4 10:32:42 KST 2012
01-21 13:09:12.398: D/Sensors(449): Remain listener = Sending .. normal delay 200ms
01-21 13:09:12.398: I/Sensors(449): sendDelay --- 200000000
01-21 13:09:12.398: I/Sensors(1852): setDelay :: handle = 0   delay = 200000000
01-21 13:09:12.398: D/SensorManager(449): JNI - sendDelay
01-21 16:14:17.835: E/Google Maps Android API(12168): Failed to load map.  Could not contact Google servers.

Screenshot

This is the result, Blank screen with zoom options, No map in MapView.

I have followed each and every step mentioned at:-

1.) Tutorial

2.) Google Map Android Api V2

回答1:

Please check..

  1. check if the "libs" folder containing the "android-support-v4.jar" exists in your project.

    "android-support-v4.jar" is located in "/extras/android/compatibility/v4/android-support-v4.jar" under your "android-sdk" drectory.

  2. Before running your project, you must set your project Build target to "Google APIs", not Android x.x. version : Select your project and click Project > Properties > Project Build Target in Eclipse and select any "Google APIs ", and then run your project on your phone. If you use the emulator, also MUST set the AVD of the emulator to the any "Google APIs ".

  3. Once more, you don't need to create the new Google Maps API key in order to test your project, Just use the default provided API key, which is shown as "Key for browser apps (with referers) "in your Google APIs Console.

  4. Finally, the most important is to add Google Play services as an Android library project as follows:

    Select File > Import > Android > Existing Android Code Into Workspace and click Next. Select Browse..., enter /extras/google/google_play_services/libproject/google-play-services_lib, and click Finish.



回答2:

I have compiled your code and I get maps working. I think I discovered the problem: wrong credentials got cached.

The first time I ran your code, it was using wrong credentials. Although I have fixed them, I was still getting the "authorization failure" error. Then I simply uninstalled the app, ran it again and then maps got working.

Apparently Google Maps credentials are cached somewhere. Simpling running the app again does not overwrite them.

That also explains why I only got maps working after running my other app using Debug As (not Run As)...

I had the same problem as you and I got maps working only when running the application on a real device through "Debug As > Android Application".

I'm a newbie in Android development. I don't know if this is just the way things are or we are missing something :)



回答3:

A common reason for this is not registering the correct keys in your Google API console. Specifically, if you are launching directly from Eclipse, your app is not being signed with your release key, but instead with your debug key. Make sure you register both key fingerprints + package names in your console. It helps to check you have your package names correct, too.

Here is a link to how to find your debug certificate fingerprint. Look under the section 'Displaying the debug certificate fingerprint'



回答4:

Please use the Browser key when you download and run the sample project from the internet. Android key will not work in that case and will give this error.

"Could not contact to server. Authorization Failed"

Go to your API Console and get your browser key

Thanks

Let me know if you have any queries regarding Google Maps Api V2



回答5:

Please see already posted answer on SO, it will definitely help you..

Need to import project from \extras\google\google_play_services\libproject\google-play-services_lib

Update :

Make sure your device have Google Play Services apk installed and its version should be > 2

Let me know if it works for you..



回答6:

Got this problem because I had restriction enabled for my API key in Google Console.

Make sure it is set to none and then try again



回答7:

I figured out the issue that was with registering the application certificate.

What we tried was that we sign the application with our own keystore & alias. But here we exactly need to use the debug.keystore which is already available in SDK.



回答8:

In that case api key not correct then the google map not showing so follow answer.

Put the below Meta data in android Menifest file first.

 <meta-data
    android:name="com.google.android.gms.version"
        android:value="@integer/google_play_services_version" />
 <meta-data
        android:name="com.google.android.maps.v2.API_KEY"
        android:value="AIzaSyAU9ShujnIg3IDQxtPrafaf7Q1qOvFVdwNmWc4" />

And then put the right Api key in menifest file.