2015-05-07 2 views
19

In unserer Anwendung möchten wir den Android Default GPS Dialog integrieren. Das selbe Dialogfeld, das erscheint, wenn das GPS ausgeschaltet ist und wir meine Positionstaste in Google Map Apps drücken. Habe auch das Bild des Dialogs angehängt, den ich integrieren möchte.Verwenden Sie den Android Standard GPS ON-OFF-Dialog in Meine Anwendung

  1. Wenn Sie auf "Nein" klicken, wird der Dialog geschlossen.
  2. Klicken Sie auf "Ja" Option wird das GPS des Geräts direkt aktivieren.

Dialog das Symbol angezeigt wird für OLA App Below (ANDROID L):
enter image description here

Dialog das Symbol angezeigt wird für OLA App Below (ANDROID KIT_KAT):
enter image description here

Dialog das Symbol angezeigt wird für Google Map Unten (ANDROID L):
enter image description here

Unsere bestehende Implementierung ist, wenn t Wenn das GPS ausgeschaltet ist, wird die Anwendung auf den Standardbildschirm für die Standorteinstellung des Geräts umgeleitet, von wo aus der Standort aktiviert werden kann.

freuen uns auf Antworten. Vielen Dank im Voraus.

+0

Ich denke, Sie müssen einen benutzerdefinierten Dialog erstellen, der im Lollipop durch die Kontrolle erlaubt ist. –

+0

Ich habe den gleichen Dialog in der OLA-Fahrerhausanwendung gesehen. Ich glaube nicht, dass sie den benutzerdefinierten Dialog erstellt haben. Was sind deine Gedanken? Gleiches erscheint für KIT-KAT-Version zu. – Balu

+0

Check out: http://stackoverflow.com/questions/29801368/how-to-show-enable-location-dialog-like-google-maps –

Antwort

6

Sie müssen die neueste Version des Google Play-Dienstes verwenden. Die neueste Version hat einen Dialog, um alle notwendigen Dinge zu aktivieren, um das GPS zu erhalten.

Von Android Developer Play-Service-Dokumentation,

Einstellungen Location - Während die FusedLocationProviderApi mehr Sensoren kombiniert, um Ihnen den optimalen Standort zu geben, die Genauigkeit der Lage Ihrer App noch erhalten, hängt stark von den auf dem aktivierten Einstellungen Gerät (GPS, WLAN, Flugzeugmodus und andere). Mit der neuen Klasse "SettingsApi" können Sie den Dialog "Standorteinstellungen" aufrufen, in dem Benutzer über ein One-Touch-Steuerelement ihre Einstellungen ändern können, ohne die App verlassen zu müssen.

Link verweist auf die Play Service-Versionsdokumentation. Version 7.0 hat diese neue Eingabeaufforderung eingeführt.

+4

https://developers.google.com/android/reference/com/google/android/gms/location/SettingsApi –

0

Ola Cabs verwendet die neu veröffentlichte Einstellungs-API, um diese Funktionalität zu erreichen. Gemäß der neuen API muss der Benutzer nicht zur Einstellungsseite navigieren, um Standortdienste zu aktivieren, die eine nahtlose Integration für denselben ermöglichen. Bitte lesen Sie this für weitere Details.

3

import android.content.Intent; 
import android.content.IntentSender; 
import android.os.Bundle; 
import android.support.annotation.NonNull; 
import android.support.annotation.Nullable; 
import android.support.v7.app.AppCompatActivity; 
import android.widget.Toast; 

import com.google.android.gms.common.ConnectionResult; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.common.api.PendingResult; 
import com.google.android.gms.common.api.ResultCallback; 
import com.google.android.gms.common.api.Status; 
import com.google.android.gms.location.LocationRequest; 
import com.google.android.gms.location.LocationServices; 
import com.google.android.gms.location.LocationSettingsRequest; 
import com.google.android.gms.location.LocationSettingsResult; 
import com.google.android.gms.location.LocationSettingsStatusCodes; 

public class LocSettingsActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, ResultCallback { 

    protected GoogleApiClient mGoogleApiClient; 
    protected LocationRequest locationRequest; 
    int REQUEST_CHECK_SETTINGS = 100; 

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

     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addApi(LocationServices.API) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this).build(); 
     mGoogleApiClient.connect(); 

     locationRequest = LocationRequest.create(); 
     locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
     locationRequest.setInterval(30 * 1000); 
     locationRequest.setFastestInterval(5 * 1000); 
    } 

    @Override 
    public void onConnected(@Nullable Bundle bundle) { 

     LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() 
       .addLocationRequest(locationRequest); 
     builder.setAlwaysShow(true); 
     PendingResult result = 
       LocationServices.SettingsApi.checkLocationSettings(
         mGoogleApiClient, 
         builder.build() 
       ); 

     result.setResultCallback(this); 

    } 

    @Override 
    public void onConnectionSuspended(int i) { 

    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

    } 

    @Override 
    public void onResult(@NonNull LocationSettingsResult locationSettingsResult) { 
     final Status status = locationSettingsResult.getStatus(); 
     switch (status.getStatusCode()) { 
      case LocationSettingsStatusCodes.SUCCESS: 

       // NO need to show the dialog; 

       break; 

      case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: 
       // Location settings are not satisfied. Show the user a dialog 

       try { 
        // Show the dialog by calling startResolutionForResult(), and check the result 
        // in onActivityResult(). 

        status.startResolutionForResult(LocSettingsActivity.this, REQUEST_CHECK_SETTINGS); 

       } catch (IntentSender.SendIntentException e) { 

        //failed to show 
       } 
       break; 

      case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: 
       // Location settings are unavailable so not possible to show any dialog now 
       break; 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == REQUEST_CHECK_SETTINGS) { 

      if (resultCode == RESULT_OK) { 

       Toast.makeText(getApplicationContext(), "GPS enabled", Toast.LENGTH_LONG).show(); 
      } else { 

       Toast.makeText(getApplicationContext(), "GPS is not enabled", Toast.LENGTH_LONG).show(); 
      } 

     } 
    } 
} 

dependencies { 
    compile fileTree(dir: 'libs', include: ['*.jar']) 
    compile 'com.android.support:appcompat-v7:23.0.1' 
    compile 'com.google.android.gms:play-services-location:8.4.0' 
} 
+0

Arbeitete für mich danke :) – shubomb

0

Schritt für Schritt

Schritt 1 check hasGPSDevice Unterstützung oder nicht

Schritt 2 hasGPSDevice wahr überprüfen Marshmallow Permimssion

Schritt 3. März shMallow Permimssion wahre weisort bereits auf oder nicht

Schritt 4 Wenn Standort auf der dann rufen GPS-Tracker und holen Lat Long

Schritt 5 Wenn Standort aus und dann Rufort Dialog gleiche wie Google Maps

Source Code

https://drive.google.com/open?id=0BzBKpZ4nzNzUMnVLTGpWcTk2QUE

In

Abhängigkeit und Internet Permission

Kompilierung 'com.google.android.gms: Play-Services-Standort: 8.4.0'

package com.keshav.locationenabledorcancelwithoutoutsideclick; 

import android.Manifest; 
import android.content.Context; 
import android.content.Intent; 
import android.content.IntentSender; 
import android.content.pm.PackageManager; 
import android.location.Address; 
import android.location.Geocoder; 
import android.location.LocationManager; 
import android.os.Build; 
import android.os.Bundle; 
import android.support.annotation.NonNull; 
import android.support.annotation.Nullable; 
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.common.ConnectionResult; 
import com.google.android.gms.common.api.GoogleApiClient; 
import com.google.android.gms.common.api.PendingResult; 
import com.google.android.gms.common.api.Result; 
import com.google.android.gms.common.api.ResultCallback; 
import com.google.android.gms.common.api.Status; 
import com.google.android.gms.location.LocationRequest; 
import com.google.android.gms.location.LocationServices; 
import com.google.android.gms.location.LocationSettingsRequest; 
import com.google.android.gms.location.LocationSettingsStatusCodes; 
import com.keshav.locationenabledorcancelwithoutoutsideclick.gps.GPSTracker; 

import java.io.IOException; 
import java.util.List; 
import java.util.Locale; 

public class LocSettingsActivity extends AppCompatActivity implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, ResultCallback { 

    protected GoogleApiClient mGoogleApiClient; 
    protected LocationRequest locationRequest; 
    int REQUEST_CHECK_SETTINGS = 100; 

    GPSTracker gps; 


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

     //Step 1 
     checkPermission(); 

    } 

    @Override 
    public void onConnected(@Nullable Bundle bundle) { 

     LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder() 
       .addLocationRequest(locationRequest); 
     builder.setAlwaysShow(true); 
     PendingResult result = 
       LocationServices.SettingsApi.checkLocationSettings(
         mGoogleApiClient, 
         builder.build() 
       ); 

     result.setResultCallback(this); 
    } 

    @Override 
    public void onConnectionSuspended(int i) { 

    } 

    @Override 
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 

    } 

    @Override 
// public void onResult(@NonNull LocationSettingsResult locationSettingsResult) { 
    public void onResult(@NonNull Result locationSettingsResult) { 
     final Status status = locationSettingsResult.getStatus(); 
     switch (status.getStatusCode()) { 
      case LocationSettingsStatusCodes.SUCCESS: 

       // NO need to show the dialog; 

       break; 

      case LocationSettingsStatusCodes.RESOLUTION_REQUIRED: 
       // Location settings are not satisfied. Show the user a dialog 

       try { 
        // Show the dialog by calling startResolutionForResult(), and check the result 
        // in onActivityResult(). 

        status.startResolutionForResult(LocSettingsActivity.this, REQUEST_CHECK_SETTINGS); 

       } catch (IntentSender.SendIntentException e) { 

        //failed to show 
       } 
       break; 

      case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE: 
       // Location settings are unavailable so not possible to show any dialog now 
       break; 
     } 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     if (requestCode == REQUEST_CHECK_SETTINGS) { 

      if (resultCode == RESULT_OK) { 
       Toast.makeText(getApplicationContext(), "GPS enabled", Toast.LENGTH_LONG).show(); 
       Log.e("Keshav", "..........GPS enabled.............."); 

       //TODO Important When Gps Enable Just Now Need Some Time ..........otherwise lat long 0.0 fetch 
       // TODO Need Some time to call GPS Tracker Service 
       new Thread(new Runnable() { 
        @Override 
        public void run() { 
         try { 
          Thread.sleep(2000);  //Todo dummy delay for 2 second 
         } catch (InterruptedException e) { 
          e.printStackTrace(); 
         } 

         //update ui on UI thread 
         runOnUiThread(new Runnable() { 
          @Override 
          public void run() { 
           callLocationGpsTracker(); 
          } 
         }); 
        } 
       }).start(); 


      } else { 
       callLocationDialog(); 
       Log.e("Keshav", "..........GPS not enabled.............."); 
       Toast.makeText(getApplicationContext(), "GPS is not enabled", Toast.LENGTH_LONG).show(); 
      } 

     } 
    } 

    @Override 
    public void onPointerCaptureChanged(boolean hasCapture) { 

    } 

    private void checkPermission(){ 
     if (!hasGPSDevice(LocSettingsActivity.this)) { 
      Log.e("keshav", "Gps not Supported"); 
      Toast.makeText(LocSettingsActivity.this, "Gps not Supported", Toast.LENGTH_SHORT).show(); 
     } else { 
      Log.e("keshav", "Gps Supported ---hasGPSDevice return true--Step 1 Pass..........."); 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { 
       int permissionCheck = ContextCompat.checkSelfPermission(LocSettingsActivity.this, 
         Manifest.permission.CAMERA); 

       if (permissionCheck == PackageManager.PERMISSION_GRANTED) { 
        Log.e("permission", "granted"); 
        locationEnabled_or_Not(); 
       } else { 
        ActivityCompat.requestPermissions(LocSettingsActivity.this, 
          new String[]{Manifest.permission.CAMERA, 
            Manifest.permission.READ_EXTERNAL_STORAGE, 
            Manifest.permission.WRITE_EXTERNAL_STORAGE, 
            Manifest.permission.ACCESS_FINE_LOCATION, 
            Manifest.permission.ACCESS_COARSE_LOCATION,}, 1); 
       } 
      } else { 
       Log.e("MainActivity", "Lower Than MarshMallow"); 
       locationEnabled_or_Not(); 
      } 
     } 
    } 


    //TODO Step 1 
    public boolean hasGPSDevice(Context context) { 
     final LocationManager mgr = (LocationManager) context 
       .getSystemService(Context.LOCATION_SERVICE); 
     if (mgr == null) 
      return false; 
     final List<String> providers = mgr.getAllProviders(); 
     if (providers == null) 
      return false; 
     return providers.contains(LocationManager.GPS_PROVIDER); 
    } 


    //TODO Step 2 
    // TODO When Location not enabled show popup 
    // TODO When Location already Enabled CAll GPS Tracker 
    private void locationEnabled_or_Not() { 
     Log.e("keshav", "locationEnabled_or_Not Step 2 Pass..........."); 
     final LocationManager manager = (LocationManager) LocSettingsActivity.this.getSystemService(Context.LOCATION_SERVICE); 
     if (!manager.isProviderEnabled(LocationManager.GPS_PROVIDER) && hasGPSDevice(LocSettingsActivity.this)) { 
      Log.e("keshav", "Gps not enabled"); 
      callLocationDialog(); 
     } else { 
      Log.e("keshav", "Gps already enabled"); 
      callLocationGpsTracker();   // TODO When Gps already enabled call direct GPS Tracker 
     } 
    } 

    //TODO Step 3 when hasGPSDevice return true 

    private void callLocationDialog() { 

     Log.e("keshav", "callLocationDialog Step 3 Popup called ..........."); 

     mGoogleApiClient = new GoogleApiClient.Builder(this) 
       .addApi(LocationServices.API) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this).build(); 
     mGoogleApiClient.connect(); 

     locationRequest = LocationRequest.create(); 
     locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY); 
     locationRequest.setInterval(30 * 1000); 
     locationRequest.setFastestInterval(5 * 1000); 
    } 

    //TODO Step 4 when location on fetch GPS Tracker Through Latitude Longitude 

    private void callLocationGpsTracker() { 

     Log.e("keshav", "callLocationGpsTracker Step 4 Called ... fetch Location"); 

     gps = new GPSTracker(LocSettingsActivity.this); 

     // check if GPS enabled 
     if (gps.canGetLocation()) { 

      double latitude = gps.getLatitude(); 
      double longitude = gps.getLongitude(); 

      Log.e("MainActivity", "latitude -> " + latitude); 
      Log.e("MainActivity", "longitude -> " + longitude); 

      getAddress(latitude, longitude); 

//   LocationAddress locationAddress = new LocationAddress(); 
//   locationAddress.getAddressFromLocation(latitude, longitude, 
//     getApplicationContext(), new GeocoderHandler()); 

     } else { 
      // TODO can't get location 
      // TODO GPS or Network is not enabled 
      // TODO Ask user to enable GPS/network in settings 

      //TODO need again call Locaton Dialog 
      callLocationDialog(); 
     } 
    } 

    private void getAddress(double lat, double lon) { 
     String cityName = ""; 
     String stateName = ""; 
     String postalCode = ""; 
     String countryName = ""; 

     StringBuilder finalAddress = new StringBuilder(); 

     try { 
      Geocoder geocoder = new Geocoder(LocSettingsActivity.this, Locale.getDefault()); 
      List<Address> addresses = geocoder.getFromLocation(lat, lon, 1); 

      if (addresses != null) { 

       try { 
        cityName = addresses.get(0).getLocality(); 
        stateName = addresses.get(0).getAdminArea(); 
        countryName = addresses.get(0).getCountryName(); 
        postalCode = addresses.get(0).getPostalCode(); 

        if (addresses.get(0).getAddressLine(0) != null) 
         finalAddress.append(addresses.get(0).getAddressLine(0)); 
        if (addresses.get(0).getAddressLine(1) != null) 
         finalAddress.append(" " + addresses.get(0).getAddressLine(1)); 
        if (addresses.get(0).getAddressLine(2) != null) 
         finalAddress.append(" " + addresses.get(0).getAddressLine(2)); 
        if (addresses.get(0).getAddressLine(3) != null) 
         finalAddress.append(" " + addresses.get(0).getAddressLine(3)); 

        Log.e("keshav", "addres 0 -> " + addresses.get(0).getAddressLine(0)); 
        Log.e("keshav", "addres 1 -> " + addresses.get(0).getAddressLine(1)); 
        Log.e("keshav", "addres 2 -> " + addresses.get(0).getAddressLine(2)); 
        Log.e("keshav", "addres 3 -> " + addresses.get(0).getAddressLine(3)); 
        Log.e("keshav", "addres final -> " + finalAddress); 

       } catch (Exception e) { 
        Log.e("keshav", "Exception occurd -> " + e.getMessage()); 
        e.printStackTrace(); 
       } 
       Log.e("keshav", "cityName -> " + cityName); 
       Log.e("keshav", "stateName -> " + stateName); 
       Log.e("keshav", "countryName -> " + countryName); 
       Log.e("keshav", "PostalCode -> " + postalCode); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    protected void onResume() { 
     super.onResume(); 
     checkPermission(); 
    } 
} 
===============================GPSTracker=================================== 

package com.keshav.locationenabledorcancelwithoutoutsideclick.gps; 

import android.app.AlertDialog; 
import android.app.Service; 
import android.content.Context; 
import android.content.DialogInterface; 
import android.content.Intent; 
import android.location.Location; 
import android.location.LocationListener; 
import android.location.LocationManager; 
import android.os.Bundle; 
import android.os.IBinder; 
import android.provider.Settings; 
import android.util.Log; 

public class GPSTracker extends Service implements LocationListener { 

    private final Context mContext; 

    // flag for GPS status 
    boolean isGPSEnabled = false; 

    // flag for network status 
    boolean isNetworkEnabled = false; 

    // flag for GPS status 
    boolean canGetLocation = false; 

    Location location; // location 
    double latitude; // latitude 
    double longitude; // longitude 

    // The minimum distance to change Updates in meters 
    private static final long MIN_DISTANCE_CHANGE_FOR_UPDATES = 10; // 10 meters 

    // The minimum time between updates in milliseconds 
    private static final long MIN_TIME_BW_UPDATES = 1000 * 60 * 1; // 1 minute 

    // Declaring a Location Manager 
    protected LocationManager locationManager; 

    public GPSTracker(Context context) { 
     this.mContext = context; 
     getLocation(); 
    } 

    public Location getLocation() { 
     try { 
      locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE); 

      // getting GPS status 
      isGPSEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); 

      // getting network status 
      isNetworkEnabled = locationManager 
        .isProviderEnabled(LocationManager.NETWORK_PROVIDER); 

      if (!isGPSEnabled && !isNetworkEnabled) { 
       // no network provider is enabled 
      } else { 
       this.canGetLocation = true; 
       // First get location from Network Provider 
       if (isNetworkEnabled) { 
        locationManager.requestLocationUpdates(
          LocationManager.NETWORK_PROVIDER, 
          MIN_TIME_BW_UPDATES, 
          MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 

        Log.d("Network", "Network"); 
        if (locationManager != null) { 
         location = locationManager 
           .getLastKnownLocation(LocationManager.NETWORK_PROVIDER); 

         if (location != null) { 
          latitude = location.getLatitude(); 
          longitude = location.getLongitude(); 
         } 
        } 
       } 

       // if GPS Enabled get lat/long using GPS Services 
       if (isGPSEnabled) { 
        if (location == null) { 
         locationManager.requestLocationUpdates(
           LocationManager.GPS_PROVIDER, 
           MIN_TIME_BW_UPDATES, 
           MIN_DISTANCE_CHANGE_FOR_UPDATES, this); 

         Log.d("GPS Enabled", "GPS Enabled"); 
         if (locationManager != null) { 
          location = locationManager 
            .getLastKnownLocation(LocationManager.GPS_PROVIDER); 

          if (location != null) { 
           latitude = location.getLatitude(); 
           longitude = location.getLongitude(); 
          } 
         } 
        } 
       } 
      } 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     return location; 
    } 

    /** 
    * Stop using GPS listener 
    * Calling this function will stop using GPS in your app 
    */ 

    public void stopUsingGPS() { 
     if (locationManager != null) { 
      locationManager.removeUpdates(GPSTracker.this); 
     } 
    } 

    /** 
    * Function to get latitude 
    */ 

    public double getLatitude() { 
     if (location != null) { 
      latitude = location.getLatitude(); 
     } 

     // return latitude 
     return latitude; 
    } 

    /** 
    * Function to get longitude 
    */ 

    public double getLongitude() { 
     if (location != null) { 
      longitude = location.getLongitude(); 
     } 

     // return longitude 
     return longitude; 
    } 

    /** 
    * Function to check GPS/wifi enabled 
    * 
    * @return boolean 
    */ 

    public boolean canGetLocation() { 
     return this.canGetLocation; 
    } 

    /** 
    * Function to show settings alert dialog 
    * On pressing Settings button will lauch Settings Options 
    */ 

    public void showSettingsAlert() { 
     AlertDialog.Builder alertDialog = new AlertDialog.Builder(mContext); 

     // Setting Dialog Title 
     alertDialog.setTitle("GPS is settings"); 

     // Setting Dialog Message 
     alertDialog.setMessage("GPS is not enabled. Do you want to go to settings menu?"); 

     // On pressing Settings button 
     alertDialog.setPositiveButton("Settings", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); 
       mContext.startActivity(intent); 
      } 
     }); 

     // on pressing cancel button 
     alertDialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int which) { 
       dialog.cancel(); 
      } 
     }); 

     // Showing Alert Message 
     alertDialog.show(); 
    } 

    @Override 
    public void onLocationChanged(Location location) { 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
    } 

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

    @Override 
    public IBinder onBind(Intent arg0) { 
     return null; 
    } 
} 

Source Code

https://drive.google.com/open?id=0BzBKpZ4nzNzUMnVLTGpWcTk2QUE

Verwandte Themen