Die Anleitung zu Google Maps Android API

1- Install the Google Map API

Zuerste stellen Sie sicher, dass Ihr  Android Studio schon  Google API und  Google Play Service installiert hat. Sie sollen prüfen und installieren wenn nötig.
Prüfen Sie, ob Google API installiert wird oder nicht.
Die Package  "Google *** System Image" sollen installiert werden
Zunächst sollen Sie die Bildlaufleiste ziehen um zu prüfen, ob   Google Play Service installiert wird oder nicht

2- Using Google System Image for Emulator

Nach der Installierung der Bibliothekspackage wie oben sollen Sie bei der Durchführung der Applikation Google Map zur Benutzung Goolge System Image konfigurieren

3- Register Google Map API

Ihre Applikation hat die Element die Lankarte. Und die Daten der Landkarte liegt in dem Datenzentrum von Goole. Deshalb ruft Ihre Applikation ständig die Landkartendaten durch eine Dienstleistung ab
Obwohl ist das Landkartendatum der Google umsonst aber die Abrufung ist nicht willkürlich. Sie brauchen ein API Key, die so gleich wie ein Empfehlungsschreiben (Credentials) zum Zugang der Landkartendatum ist
Sie brauchen ein  Google Map API Key registrieren. Das ist ganz frei. Sie können bei... lesen

4- Google Map example

Android Studio unterstützt Sie bei der Erstellung eines Projekt mit Google Map sehr einfach und schnell
Allerdings erstelle ich ein Projekt und dann das Objekt Google Map in der Bildschirm ziehen und ablegen. Es ist vielleicht besser, wenn Sie alle Dinge gut verstehen. OK, auf  Android Studio erstelle ich ein Projekt mit dem Name von   MyGoogleMap.
Ein leeres Projekt wurde erstellt

MapFragment & SupportMapFragment:

MapFragment & SupportMapFragment sind die bereit gebauten Fragement, die schon die Elemente GoogleMap haben. Sie sollen ein der 2 Fragment in Ihrem Bildschirm ziehen und ablegen. SupportMapFragment haben mehre unterstützten Funktionen
Wenn auf dem Fenster der Fragments-Option gibt es keine Elemente MapFragment und  SupportMapFragment. Sie sollen die File build.gradle (Module:app):konfigurieren
Sie brauchen einige Konfigurationen für die File build.gradle (Module:app):
Fügen Sie die abhängige Bibliothek hin
compile 'com.google.android.gms:play-services:8.1.0'
Beachten Sie: Obwohl Google Play Services die Version 8.3.0 hat, starten Sie wegen irgendeines Grund vielleicht es nicht. Deshalb können Sie die Version 8.1.0 benutzen. Bitte benutzen Sie diese Version zur Prüfung bevor Sie die neueren Version benutzen
Nach der Meldung der abhängigen Bibliothek sollen Sie das ganze Projekt wieder kompilieren
Rück zum Designbildschirm. Sie haben 2 Option MapFragment oder  SupportMapFragment.zu wählen. Sie sind die Fragment mit der Elemente GoogleMap.Davon hat SupportMapFragment mehrere Unterstützungsfunktionen. Wählen Sie SupportMapFragment.
Ziehen Sie Fragment voll auf dem Bildschirm
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="org.o7planning.mygooglemap.MainActivity">

    <fragment
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:name="com.google.android.gms.maps.SupportMapFragment"
        android:id="@+id/fragment"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_alignParentBottom="true" />

</RelativeLayout>
MainActivity.java
package org.o7planning.mygooglemap;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

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

Google Map API Key

GoogleMap auf Android benutzt eine Dienstleistung um die Landkartendatum aus Goolge zu nehmen und sie anzuzeigen. Oben haben Sie ein Google Map API Key registriert. Sie sollen diesen Key in AndroidManifest.xml.melden
<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="Your API KEY" />
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.o7planning.mygooglemap">


    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <!-- Enter your GoogleMap Android API Key -->
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="Your ANDROID API Key" />


        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
Jetzt können Sie die Applikation starten

5- Customize GoogleMAP

Weiter mit dem obengewähnten Beispiel. Sie brauchen die Applikationscode um Ihre jetzige Position zu haben und benutzen Marker um die Position in die Landkarte zu markieren
Sie brauchen einige Konfiguration auf AndroidManifest.xml, die die Position, Netwerksverbindung und Internetverbindung sehen zu lassen. Auf der AndroidManifest.xml hinfügen wie folgend:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="org.o7planning.mygooglemap">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

        <!-- Enter your GoogleMap Android API Key -->
        <meta-data
            android:name="com.google.android.maps.v2.API_KEY"
            android:value="Your Android API Key" />


        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
MainActivity.java
package org.o7planning.mygooglemap;

import android.Manifest;
import android.app.ProgressDialog;
import android.content.pm.PackageManager;
import android.location.Criteria;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.widget.Toast;

import com.google.android.gms.maps.CameraUpdateFactory;
import com.google.android.gms.maps.GoogleMap;
import com.google.android.gms.maps.OnMapReadyCallback;
import com.google.android.gms.maps.SupportMapFragment;
import com.google.android.gms.maps.model.CameraPosition;
import com.google.android.gms.maps.model.LatLng;
import com.google.android.gms.maps.model.Marker;
import com.google.android.gms.maps.model.MarkerOptions;

public class MainActivity extends AppCompatActivity implements LocationListener {

    private GoogleMap myMap;
    private ProgressDialog myProgress;

    private static final String MYTAG = "MYTAG";

    // Request Code to ask the user for permission to view their current location (***).
    // Value 8bit (value <256)
    public static final int REQUEST_ID_ACCESS_COURSE_FINE_LOCATION = 100;


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

        // Create Progress Bar.
        myProgress = new ProgressDialog(this);
        myProgress.setTitle("Map Loading ...");
        myProgress.setMessage("Please wait...");
        myProgress.setCancelable(true);
        // Display Progress Bar.
        myProgress.show();


        SupportMapFragment mapFragment
                = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.fragment);

        // Set callback listener, on Google Map ready.
        mapFragment.getMapAsync(new OnMapReadyCallback() {

            @Override
            public void onMapReady(GoogleMap googleMap) {
                onMyMapReady(googleMap);
            }
        });

    }

    private void onMyMapReady(GoogleMap googleMap) {
        // Get Google Map from Fragment.
        myMap = googleMap;
        // Sét OnMapLoadedCallback Listener.
        myMap.setOnMapLoadedCallback(new GoogleMap.OnMapLoadedCallback() {

            @Override
            public void onMapLoaded() {
                // Map loaded. Dismiss this dialog, removing it from the screen.
                myProgress.dismiss();

                askPermissionsAndShowMyLocation();
            }
        });
        myMap.setMapType(GoogleMap.MAP_TYPE_NORMAL);
        myMap.getUiSettings().setZoomControlsEnabled(true);
        myMap.setMyLocationEnabled(true);
    }


    private void askPermissionsAndShowMyLocation() {

        // With API> = 23, you have to ask the user for permission to view their location.
        if (Build.VERSION.SDK_INT >= 23) {
            int accessCoarsePermission
                    = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION);
            int accessFinePermission
                    = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);


            if (accessCoarsePermission != PackageManager.PERMISSION_GRANTED
                    || accessFinePermission != PackageManager.PERMISSION_GRANTED) {
                // The Permissions to ask user.
                String[] permissions = new String[]{Manifest.permission.ACCESS_COARSE_LOCATION,
                        Manifest.permission.ACCESS_FINE_LOCATION};
                // Show a dialog asking the user to allow the above permissions.
                ActivityCompat.requestPermissions(this, permissions,
                        REQUEST_ID_ACCESS_COURSE_FINE_LOCATION);

                return;
            }
        }

        // Show current location on Map.
        this.showMyLocation();
    }

    // When you have the request results.
    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {

        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        //
        switch (requestCode) {
            case REQUEST_ID_ACCESS_COURSE_FINE_LOCATION: {

                // Note: If request is cancelled, the result arrays are empty.
                // Permissions granted (read/write).
                if (grantResults.length > 1
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED
                        && grantResults[1] == PackageManager.PERMISSION_GRANTED) {

                    Toast.makeText(this, "Permission granted!", Toast.LENGTH_LONG).show();

                    // Show current location on Map.
                    this.showMyLocation();
                }
                // Cancelled or denied.
                else {
                    Toast.makeText(this, "Permission denied!", Toast.LENGTH_LONG).show();
                }
                break;
            }
        }
    }

    // Find Location provider is openning.
    private String getEnabledLocationProvider() {
        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        // Criteria to find location provider.
        Criteria criteria = new Criteria();

        // Returns the name of the provider that best meets the given criteria.
        // ==> "gps", "network",...
        String bestProvider = locationManager.getBestProvider(criteria, true);

        boolean enabled = locationManager.isProviderEnabled(bestProvider);

        if (!enabled) {
            Toast.makeText(this, "No location provider enabled!", Toast.LENGTH_LONG).show();
            Log.i(MYTAG, "No location provider enabled!");
            return null;
        }
        return bestProvider;
    }

    // Call this method only when you have the permissions to view a user's location.
    private void showMyLocation() {

        LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE);

        String locationProvider = this.getEnabledLocationProvider();

        if (locationProvider == null) {
            return;
        }

        // Millisecond
        final long MIN_TIME_BW_UPDATES = 1000;
        // Met
        final float MIN_DISTANCE_CHANGE_FOR_UPDATES = 1;

        Location myLocation = null;
        try {
            // This code need permissions (Asked above ***)
            locationManager.requestLocationUpdates(
                    locationProvider,
                    MIN_TIME_BW_UPDATES,
                    MIN_DISTANCE_CHANGE_FOR_UPDATES, (LocationListener) this);
            // Getting Location.
            // Lấy ra vị trí.
            myLocation = locationManager
                    .getLastKnownLocation(locationProvider);
        }
        // With Android API >= 23, need to catch SecurityException.
        catch (SecurityException e) {
            Toast.makeText(this, "Show My Location Error: " + e.getMessage(), Toast.LENGTH_LONG).show();
            Log.e(MYTAG, "Show My Location Error:" + e.getMessage());
            e.printStackTrace();
            return;
        }

        if (myLocation != null) {

            LatLng latLng = new LatLng(myLocation.getLatitude(), myLocation.getLongitude());
            myMap.animateCamera(CameraUpdateFactory.newLatLngZoom(latLng, 13));

            CameraPosition cameraPosition = new CameraPosition.Builder()
                    .target(latLng)             // Sets the center of the map to location user
                    .zoom(15)                   // Sets the zoom
                    .bearing(90)                // Sets the orientation of the camera to east
                    .tilt(40)                   // Sets the tilt of the camera to 30 degrees
                    .build();                   // Creates a CameraPosition from the builder
            myMap.animateCamera(CameraUpdateFactory.newCameraPosition(cameraPosition));


            // Add Marker to Map
            MarkerOptions option = new MarkerOptions();
            option.title("My Location");
            option.snippet("....");
            option.position(latLng);
            Marker currentMarker = myMap.addMarker(option);
            currentMarker.showInfoWindow();
        } else {
            Toast.makeText(this, "Location not found!", Toast.LENGTH_LONG).show();
            Log.i(MYTAG, "Location not found");
        }


    }


    @Override
    public void onLocationChanged(Location location) {

    }

    @Override
    public void onStatusChanged(String provider, int status, Bundle extras) {

    }

    @Override
    public void onProviderEnabled(String provider) {

    }

    @Override
    public void onProviderDisabled(String provider) {

    }

}
 
Starten Sie Ihre Applikation
Wenn Sie die Applikation  GoogleMap auf Ihr Gerätsimulator starten und locationManager.getLastKnownLocation gibt die Wert null rück. Sie sollen den Fehler nach dem Verzeichnis am Ende des Dokument beheben
-
Wenn der Benutzer einige Rechte für die Applikation genehmigt, fordert Android den Benutzer in den näschten Starten nicht, diese Recht zu zeigen. Sie können zur Löschung dieser Recht konfigurieren. Sehen Sie die Hinweise bei ... 

6- Appendix: Fix error - Location not found

In einigen Situation werden die Position bei der Gerätemulator nicht gefunden. Es wird wegen des Fehler-  telnet verursacht. Sie sollen den Fehler beheben

Der Schritt 1:

Stellen Sie sicher, dass  "Telnet Client" geöffnet wird

Der Schritt 2:

Starten Sie Ihre Applikation Google Map auf dem Gerätemulator

Der Schritt 3:

5554 ist der Port vom Gerätemulator. Auf CMD schreiben  Sie den Fehler :
telnet localhost 5554
Den Fehler eingeben:
geo fix 12 45
Schließen Sie  das Emulatorsfenster nicht. Schließen Sie die Applikationslandkarte ( MyGoogleMap), und öffnen Sie die Applikation wieder auf dem Handy