簡體   English   中英

android 谷歌地圖與片段顯示空白谷歌地圖

[英]android google maps with fragment display blank google map

我采用了一種非常簡單的方法在我的 android 手機上顯示地圖段。 我從來沒有機會看到地圖片段。 我總是得到一個帶有谷歌水印的空白屏幕,空的。 我已按照以下所有步驟操作:

  1. 我的 FragmentActivity 類
    import android.os.Bundle;
    import android.support.v4.app.FragmentActivity;
    import android.view.View;

    import com.google.android.gms.common.ConnectionResult;
    import com.google.android.gms.common.GooglePlayServicesUtil;
    import com.google.android.gms.maps.CameraUpdate;
    import com.google.android.gms.maps.CameraUpdateFactory;
    import com.google.android.gms.maps.GoogleMap;
    import com.google.android.gms.maps.MapFragment;
    import com.google.android.gms.maps.MapView;
    import com.google.android.gms.maps.SupportMapFragment;
    import com.google.android.gms.maps.UiSettings;
    import com.google.android.gms.maps.model.LatLng;
    import com.google.android.gms.maps.model.MarkerOptions;

    public class MapsActivity extends FragmentActivity  {
        MapView mapView;
        GoogleMap map;
        LatLng ll;
        UiSettings mapSettings;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);


            if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(this) !=                          ConnectionResult.SUCCESS) {
             //change to an alternative layout without fragment
                 setContentView(R.layout.activity_main);
            }
            else
            setContentView(R.layout.activity_maps);
            setUpMapIfNeeded();


        }

        private void setUpMapIfNeeded() 
        {
            if (map == null) 
            {
                map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                        .getMap();
                if (map != null) 
                {
                    setUpMap();
                }
            }

        }
            private void setUpMap() {
                map.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"));
            }

    }

2.我的activity_maps.xml作為我的簡單布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

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


</LinearLayout>

3.我的AndroidManifest.xml

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

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />    
    <uses-permission android:name="com.alpha.routefinder.permission.MAPS_RECEIVE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <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.READ_PHONE_STATE" />

<permission 
android:name="com.alpha.routefinder.MAPS_RECEIVE" 
android:protectionLevel="signature"></permission>

    <uses-sdk
        android:minSdkVersion="19"
        android:targetSdkVersion="19" />
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MapsActivity"
            android:label="GPS route calculator" >
            <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.gms.version"
        android:value="8115000"/>
        <meta-data android:name="com.google.android.maps.v2.API_KEY" 
        android:value="AIzaSyCR_A5-rG4THDJfvzUHck8EhCK358xMa7I"/>
        <uses-library android:name="com.google.android.maps"/>

    </application>


</manifest>
  1. 我的 Java/bin 目錄下的 keytool 生成的 debug.keystore
C:\Program Files\Java\jdk1.8.0_60\bin>keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -validi
ty 14000

5、獲取指紋SHA1

C:\Program Files\Java\jdk1.8.0_60\bin>keytool -list -alias androiddebugkey -keystore debug.keystore -storepass android -keypass android
Certificate fingerprint (SHA1): 1D:FE:FA:5E:C9:74:CF:C1:AD:F9:4B:CC:25:8B:E9:A8:7F:04:64:9D

  1. 使用導航到的 SHA1 指紋創建 Android Api 密鑰

html 頁面: https ://console.developers.google.com/apis/credentials/key/0 ? project = "myproject"

在此處輸入圖片說明

我是怎么了? 對你們所有人,請給我一個提示!

我采用了一種非常簡單的方法來在我的Android手機上顯示地圖片段。 我從來沒有機會看到地圖片段。 我總是得到一個空白的屏幕,上面有谷歌水印,是空的。 我已按照以下所有步驟操作:

  1. 我的FragmentActivity類
    import android.os.Bundle;
    import android.support.v4.app.FragmentActivity;
    import android.view.View;

    import com.google.android.gms.common.ConnectionResult;
    import com.google.android.gms.common.GooglePlayServicesUtil;
    import com.google.android.gms.maps.CameraUpdate;
    import com.google.android.gms.maps.CameraUpdateFactory;
    import com.google.android.gms.maps.GoogleMap;
    import com.google.android.gms.maps.MapFragment;
    import com.google.android.gms.maps.MapView;
    import com.google.android.gms.maps.SupportMapFragment;
    import com.google.android.gms.maps.UiSettings;
    import com.google.android.gms.maps.model.LatLng;
    import com.google.android.gms.maps.model.MarkerOptions;

    public class MapsActivity extends FragmentActivity  {
        MapView mapView;
        GoogleMap map;
        LatLng ll;
        UiSettings mapSettings;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);


            if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(this) !=                          ConnectionResult.SUCCESS) {
             //change to an alternative layout without fragment
                 setContentView(R.layout.activity_main);
            }
            else
            setContentView(R.layout.activity_maps);
            setUpMapIfNeeded();


        }

        private void setUpMapIfNeeded() 
        {
            if (map == null) 
            {
                map = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map))
                        .getMap();
                if (map != null) 
                {
                    setUpMap();
                }
            }

        }
            private void setUpMap() {
                map.addMarker(new MarkerOptions().position(new LatLng(0, 0)).title("Marker"));
            }

    }

2.我的activity_maps.xml是我的簡單布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

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


</LinearLayout>

3.我的AndroidManifest.xml

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

    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />    
    <uses-permission android:name="com.alpha.routefinder.permission.MAPS_RECEIVE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <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.READ_PHONE_STATE" />

<permission 
android:name="com.alpha.routefinder.MAPS_RECEIVE" 
android:protectionLevel="signature"></permission>

    <uses-sdk
        android:minSdkVersion="19"
        android:targetSdkVersion="19" />
    <uses-feature
        android:glEsVersion="0x00020000"
        android:required="true"/>

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MapsActivity"
            android:label="GPS route calculator" >
            <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.gms.version"
        android:value="8115000"/>
        <meta-data android:name="com.google.android.maps.v2.API_KEY" 
        android:value="AIzaSyCR_A5-rG4THDJfvzUHck8EhCK358xMa7I"/>
        <uses-library android:name="com.google.android.maps"/>

    </application>


</manifest>
  1. 我在Java / bin目錄下的keytool生成的debug.keystore
C:\Program Files\Java\jdk1.8.0_60\bin>keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -storepass android -keypass android -keyalg RSA -validi
ty 14000

5,獲取指紋SHA1

C:\Program Files\Java\jdk1.8.0_60\bin>keytool -list -alias androiddebugkey -keystore debug.keystore -storepass android -keypass android
Certificate fingerprint (SHA1): 1D:FE:FA:5E:C9:74:CF:C1:AD:F9:4B:CC:25:8B:E9:A8:7F:04:64:9D

  1. 使用SHA1指紋創建Android Api密鑰,導航至

html頁面: https ://console.developers.google.com/apis/credentials/key/0 ? project = “ myproject”

在此處輸入圖片說明

我是怎么了? 大家對pleeeeeease可以給我一個提示!

我一直在努力解決這個問題,並找到了解決它的方法。 假設您像我一樣並且確定您的代碼、api 密鑰和 SHA-1 都設置良好,那么您可能忘記在 Google 控制台上啟用“Android 地圖 SDK”。 以下是啟用它的方法:

轉到谷歌雲控制台https://console.cloud.google.com/google/maps-apis/overview

確保您登錄到您創建項目的帳戶。

打開您的項目。

點擊“憑據”

單擊“Android 版地圖 SDK”,然后單擊“啟用”。

瞧,您的應用應該正確加載 Google 地圖,而不是現在顯示空白地圖。

https://youtu.be/lDpOkpIPlts觀看本視頻教程,您將獲得最佳解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM