Le Tutoriel de Google Maps Android API

1- Installer Google Map API

D'abord, vous devez vous assurez que votre  Android Studio a installé  Google API et  Google Play Service. Vous devez le vérifier et l'installer s'il est nécessaire.
Vérifiez si  Google API est installé ou pas encore.
Les packages  "Google *** System Image" doivent également être installés.
Ensuite, vous devez défiler vers le bas afin de vérifier si Google Play Service est installé ou pas.

2-  Utilisation Google System Image pour l'émulateur

Après de l'installation les packages de bibliothèque l'étape ci- dessus, si vous exécutez une application  Google Map sur l' émulateur, vous devez configurer et utiliser  Google System Image.

3- S'inscrire Google Map API

Votre application possède des composants de cartographie, des données cartographique sont dans des centres de données de Google, donc votre application accède continuellement des données cartographiques à travers un service.
Malgré que les données cartographiques de Google sont fournies gratuitement mais vous ne pouvez pas les récupérer arbitrairement. Vous avez besoin d'une  API Key, qui est identique avec des références (Credentials) pour accéder des données cartographique.
Vous devez vous inscrire  Google Map API Key, cela est complètement gratuit. Vous pouvez voir à:
  • TODO Link!

4- Exemple avec Google Map

Android Studio vous fournit de créer un projet avec  Google Map facilement et rapidement:
Mais ici je vais créer un projet à partir de 0 et puis je glisserai l'objet  Google Map sur l'écran, peut-être sera-t-il mieux si vous voulez bien comprendre les problèmes. OK, dans Android Studio, créez un nouveau projet nommé MyGoogleMap.
Un projet vide est créé:

MapFragment & SupportMapFragment:

MapFragment & SupportMapFragment sont des fragments (fragment d'interface) qui sont déjà construits, et  GoogleMap est disponible, Vous devez faire glisser l'un des 2 fragments sur votre écran de conception.

SupportMapFragment ont plus de fonctions assistées.
Si la boîte de dialogue des fragments n'a pas de composant  MapFragment et  SupportMapFragment. Vous devez configurer le fichier  build.gradle (Module:app):
Vous avez besoin de quelques configurations pour le fichier  build.gradle (Module:app):
Ajoutez des bibliothèques:
compile 'com.google.android.gms:play-services:8.1.0'
Remarque: Malgré que  Google Play Services a la version 8.3.0 mais ce n'est pas sure qu'elle va marcher à cause de quelques raisons, donc vous pouvez utiliser la version 8.1.0, utilisez cette version pour tester avant que vous pouvez utiliser la dernière version.
Après avoir déclaré une bibliothèque tributaire, vous devez compiler à nouveau tous les projets.
Retour à la conception de l'écran, vous disposez de 2 options pour utiliser MapFragment ou SupportMapFragment. Les deux fragments contiennent le composant GoogleMap. Dans lequel SupportMapFragment ont plus de fonctionnalités. Sélectionnez SupportMapFragment.
Faites glisser Fragment remplit l'écran.
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 sur Android utilise un service pour récupérer des données de  Google et pour les exposer. Ci- dessus, vous avez enregistré  Google Map API Key, vous devez déclarer cette clé (key) dans  AndroidManifest.xml.
<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>
Maintenant vous pouvez exécuter l'application:

5- Personnaliser Google MAP

Nous continuons avec l'exemple ci-dessus. Vous devez éditer le code pour obtenir votre emplacement actuel et utiliser des marqueurs pour marquer l'emplacement sur la carte.
Vous avez besoin d'une configuration sur AndroidManifest.xml qui permet de montrer votre emplacement, d'accéder et de connecter Internet. Ajouter à AndroidManifest.xml:
<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) {

    }

}
 
Relancez votre application:
Si vous exécutez une application GoogleMap sur le simulateur et locationManager.getLastKnownLocation renvoie toujours null. Vous devez corriger cette erreur, voir les instructions aux annexes suivantes:
-
Si l'utilisateur a autorisé les autorisations pour l'application, pour la prochaine fois, des applications Android ne nécessiteront plus l'utilisateur de l'accorder. Vous pouvez configurer pour supprimer les autorisations déjà accordées à l'application. Voir les instructions à:
  • TODO Link!

6- Annexe: Erreur de correction - Emplacement introuvable

Dans certaines situations, vos applications ne trouvent pas votre emplacement lorsque vous travaillez avec un équipement de simulation en raison de l'erreur de Telnet, vous devez réparer cette erreur.
Étape 1:
Assurez- vous que "Telnet Client" a ouvert.
Étape 2:
Exécutez votre Google Map sur le simulateur.
Étape 3:
5554 est le port du simulateur. Dans CMD, saisissez la commande:
telnet localhost 5554
Étape suivante:
geo fix 12 45
Ne fermez pas la fenêtre du simulateur, fermez l'application MyGoogleMap et rouvrez cette application sur le simulateur.

View more categories: