Advertisement
Guest User

Location issue in Android 10

a guest
Aug 28th, 2020
307
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 10.53 KB | None | 0 0
  1. package com.artoon.location;
  2.  
  3. import android.Manifest;
  4. import android.annotation.SuppressLint;
  5. import android.app.Activity;
  6. import android.app.AlertDialog;
  7. import android.content.DialogInterface;
  8. import android.content.Intent;
  9. import android.content.IntentSender;
  10. import android.content.pm.PackageManager;
  11. import android.location.Location;
  12. import android.location.LocationManager;
  13. import android.os.Bundle;
  14. import android.os.Looper;
  15. import android.util.Log;
  16. import android.widget.Toast;
  17.  
  18. import androidx.annotation.NonNull;
  19. import androidx.annotation.Nullable;
  20. import androidx.core.app.ActivityCompat;
  21. import androidx.core.location.LocationManagerCompat;
  22.  
  23. import com.google.android.gms.common.api.ApiException;
  24. import com.google.android.gms.common.api.ResolvableApiException;
  25. import com.google.android.gms.location.FusedLocationProviderClient;
  26. import com.google.android.gms.location.LocationAvailability;
  27. import com.google.android.gms.location.LocationCallback;
  28. import com.google.android.gms.location.LocationRequest;
  29. import com.google.android.gms.location.LocationResult;
  30. import com.google.android.gms.location.LocationSettingsRequest;
  31. import com.google.android.gms.location.LocationSettingsResponse;
  32. import com.google.android.gms.location.LocationSettingsStatusCodes;
  33. import com.google.android.gms.location.SettingsClient;
  34. import com.google.android.gms.tasks.OnCompleteListener;
  35. import com.google.android.gms.tasks.OnFailureListener;
  36. import com.google.android.gms.tasks.OnSuccessListener;
  37. import com.google.android.gms.tasks.Task;
  38. import com.karumi.dexter.Dexter;
  39. import com.karumi.dexter.MultiplePermissionsReport;
  40. import com.karumi.dexter.PermissionToken;
  41. import com.karumi.dexter.listener.multi.MultiplePermissionsListener;
  42.  
  43. import org.json.JSONObject;
  44.  
  45. import java.util.List;
  46.  
  47. import static com.google.android.gms.location.LocationServices.getFusedLocationProviderClient;
  48. import static com.google.android.gms.location.LocationServices.getSettingsClient;
  49.  
  50. public class LocationActivity extends Activity {
  51.  
  52.     private static final String TAG = "LocationPlugin";
  53.     private SettingsClient mSettingsClient = null;
  54.     private FusedLocationProviderClient fusedLocationClient;
  55.     private int REQUEST_CHECK_SETTINGS = 0x1;
  56.  
  57.     private LocationCallback locationCallback = new LocationCallback() {
  58.         @Override
  59.         public void onLocationResult(LocationResult locationResult) {
  60.             super.onLocationResult(locationResult);
  61.             fusedLocationClient.removeLocationUpdates(locationCallback);
  62.             Location location = locationResult.getLastLocation();
  63.             if (location != null) {
  64.                 SuccessCallback(location);
  65.             } else {
  66.                 FailCallback("");
  67.             }
  68.         }
  69.  
  70.         @Override
  71.         public void onLocationAvailability(LocationAvailability locationAvailability) {
  72.             super.onLocationAvailability(locationAvailability);
  73.             Log.e(TAG, "onLocationAvailability: called " + locationAvailability);
  74.         }
  75.     };
  76.  
  77.     private void FailCallback(String reason) {
  78.         Log.e(TAG, "FailCallback: " + reason);
  79.         finish();
  80.     }
  81.  
  82.     @SuppressLint("MissingPermission")
  83.     @Override
  84.     protected void onCreate(@Nullable Bundle savedInstanceState) {
  85.         super.onCreate(savedInstanceState);
  86.  
  87.  
  88.         mSettingsClient = getSettingsClient(this);
  89.         fusedLocationClient = getFusedLocationProviderClient(this);
  90.  
  91.         if (!checkPermissions()) {
  92.             String error = "Not have permission of location";
  93.             Log.e("Location", error);
  94.             takePermission();
  95.         } else {
  96.             getLastLocation();
  97.         }
  98.  
  99.  
  100.     }
  101.  
  102.     private void SuccessCallback(Location location) {
  103.         Log.e(TAG, "SuccessCallback: " + location);
  104.         try {
  105.             JSONObject obj = new JSONObject();
  106.             obj.put("latitude", location.getLatitude());
  107.             obj.put("longitude", location.getLongitude());
  108.             Log.d("Success","Location "+obj.toString());
  109.  
  110.         } catch (Exception e) {
  111.             e.printStackTrace();
  112.         }
  113.         finish();
  114.     }
  115.  
  116.     @SuppressLint("MissingPermission")
  117.     private void getLastLocation() {
  118.         fusedLocationClient.getLastLocation()
  119.                 .addOnCompleteListener(this, new OnCompleteListener<Location>() {
  120.                     @Override
  121.                     public void onComplete(@NonNull Task<Location> task) {
  122.                         if (task.isSuccessful()) {
  123.                             Location location = task.getResult();
  124.                             if (location != null) {
  125.                                 SuccessCallback(location);
  126.                             } else {
  127.                                 getLocation();
  128.                             }
  129.                         } else {
  130.                             getLocation();
  131.                         }
  132.                     }
  133.                 });
  134.     }
  135.  
  136.     @SuppressLint("MissingPermission")
  137.     private void getLocation() {
  138.         final LocationRequest mLocationRequest = getLocationRequest();
  139.         LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
  140.         builder.setAlwaysShow(true);
  141.         builder.addLocationRequest(mLocationRequest);
  142.         LocationSettingsRequest mLocationSettingsRequest = builder.build();
  143.         mSettingsClient.checkLocationSettings(mLocationSettingsRequest)
  144.                 .addOnFailureListener(new OnFailureListener() {
  145.                     @Override
  146.                     public void onFailure(@NonNull Exception e) {
  147.                         int statusCode = ((ApiException) e).getStatusCode();
  148.  
  149.                         if (statusCode == LocationSettingsStatusCodes.RESOLUTION_REQUIRED) {
  150.                             Log.i(TAG, "Location settings are not satisfied. Attempting to upgrade " + "location settings ");
  151.                             try {
  152.                                 ResolvableApiException rae = (ResolvableApiException) e;
  153.                                 rae.startResolutionForResult(LocationActivity.this, REQUEST_CHECK_SETTINGS);
  154.                             } catch (IntentSender.SendIntentException e1) {
  155.                                 Log.i(TAG, "PendingIntent unable to execute request." + e1);
  156.                             }
  157.                         } else if (statusCode == LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE) {
  158.                             String errorMessage =
  159.                                     "Location settings are inadequate, and cannot be" + "fixed here. Fix in Settings.";
  160.                             Log.e(TAG, errorMessage);
  161.                             Toast.makeText(LocationActivity.this, errorMessage, Toast.LENGTH_LONG).show();
  162.                            
  163.  
  164.                         } else {
  165.                             String errorMessage = "Location settings Can't found";
  166.                             Log.e(TAG, errorMessage);
  167.                             Toast.makeText(LocationActivity.this, errorMessage, Toast.LENGTH_LONG).show();
  168.                            
  169.                         }
  170.                     }
  171.                 })
  172.                 .addOnSuccessListener(new OnSuccessListener<LocationSettingsResponse>() {
  173.                     @Override
  174.                     public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
  175.                         requestLocation();
  176.                     }
  177.                 });
  178.     }
  179.  
  180.     private void requestLocation() {
  181.         if (ActivityCompat.checkSelfPermission(LocationActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
  182.             return;
  183.         }
  184.         LocationRequest mLocationRequest = getLocationRequest();
  185.         fusedLocationClient.requestLocationUpdates(mLocationRequest, locationCallback, Looper.getMainLooper());
  186.     }
  187.  
  188.     private LocationRequest getLocationRequest() {
  189.         LocationRequest request = new LocationRequest();
  190.         request.setInterval(1000);
  191.         request.setNumUpdates(1);
  192.         request.setMaxWaitTime(2500);
  193.         request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
  194.         return request;
  195.     }
  196.  
  197.     /**
  198.      * Returns the current state of the permissions needed.
  199.      */
  200.     private boolean checkPermissions() {
  201.         return PackageManager.PERMISSION_GRANTED == ActivityCompat.checkSelfPermission(
  202.                 this,
  203.                 Manifest.permission.ACCESS_COARSE_LOCATION
  204.         ) && PackageManager.PERMISSION_GRANTED == ActivityCompat.checkSelfPermission(
  205.                 this,
  206.                 Manifest.permission.ACCESS_COARSE_LOCATION
  207.         );
  208.     }
  209.  
  210.     @Override
  211.     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  212.         super.onActivityResult(requestCode, resultCode, data);
  213.         Log.e(TAG, "onActivityResult: ");
  214.             LocationManager lm = (LocationManager) getSystemService(LOCATION_SERVICE);
  215.             if (LocationManagerCompat.isLocationEnabled(lm)) {
  216.                 Log.d(TAG, "Location is enabled by user");
  217.                 requestLocation();
  218.  
  219.             } else {
  220.                 Log.d(TAG, "Location enable request is cancelled by user");
  221.              
  222.             }
  223.        
  224.  
  225.     }
  226.  
  227.     private void takePermission() {
  228.         Dexter.withContext(this)
  229.                 .withPermissions(
  230.                         Manifest.permission.ACCESS_FINE_LOCATION,
  231.                         Manifest.permission.ACCESS_COARSE_LOCATION
  232.                 )
  233.                 .withListener(new MultiplePermissionsListener() {
  234.                     @Override
  235.                     public void onPermissionsChecked(MultiplePermissionsReport p0) {
  236.                         if (p0.areAllPermissionsGranted()) {
  237.                             getLocation();
  238.                         } else {
  239.                             if (p0.getDeniedPermissionResponses().size() > 0) {
  240.                                 Log.e("Error","Location Permission Not Granted");
  241.                             }
  242.                         }
  243.                     }
  244.  
  245.                     @Override
  246.                     public void onPermissionRationaleShouldBeShown(List<com.karumi.dexter.listener.PermissionRequest> list, PermissionToken permissionToken) {
  247.                         if (permissionToken != null) {
  248.                             permissionToken.continuePermissionRequest();
  249.                         }
  250.                     }
  251.                 }).check();
  252.     }
  253.  
  254.     @Override
  255.     public void finish() {
  256.         fusedLocationClient.removeLocationUpdates(locationCallback);
  257.         super.finish();
  258.     }
  259. }
  260.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement