diff options
author | Brad Leege <bleege@gmail.com> | 2016-05-16 14:11:34 -0700 |
---|---|---|
committer | Brad Leege <bleege@gmail.com> | 2016-05-17 12:03:59 -0700 |
commit | 0c9c52491233c05bd793426f1ebb05fdfbbbb4a5 (patch) | |
tree | 61cc786f16184408d8c6ce75e12bcbdfca01fe28 /platform/android/MapboxGLAndroidSDK/src/main/java/com | |
parent | 22447373ae9f975a11a809d1384e72be0d1889cf (diff) | |
download | qtlocation-mapboxgl-0c9c52491233c05bd793426f1ebb05fdfbbbb4a5.tar.gz |
[android] #5045 - Adding Async Location Permissions Approval Check
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com')
2 files changed, 42 insertions, 4 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationServices.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationServices.java index c148b02a10..e45f3cc715 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationServices.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/location/LocationServices.java @@ -74,8 +74,7 @@ public class LocationServices implements com.mapzen.android.lost.api.LocationLis * @param enableGPS true if GPS is to be enabled, false if GPS is to be disabled */ public void toggleGPS(boolean enableGPS) { - if ((ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) && - (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) { + if (!areLocationPermissionsGranted()) { Log.w(TAG, "Location Permissions Not Granted Yet. Try again after requesting."); return; } @@ -176,4 +175,17 @@ public class LocationServices implements com.mapzen.android.lost.api.LocationLis public boolean removeLocationListener(@NonNull LocationListener locationListener) { return this.locationListeners.remove(locationListener); } + + /** + * Check status of Location Permissions + * @return True if granted to the app, False if not + */ + public boolean areLocationPermissionsGranted() { + if ((ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) && + (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED)) { + Log.w(TAG, "Location Permissions Not Granted Yet. Try again after requesting."); + return false; + } + return true; + } } diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/telemetry/MapboxEventManager.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/telemetry/MapboxEventManager.java index b8f5774db1..7679f1d08a 100644 --- a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/telemetry/MapboxEventManager.java +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/telemetry/MapboxEventManager.java @@ -18,6 +18,7 @@ import android.net.wifi.WifiManager; import android.os.AsyncTask; import android.os.BatteryManager; import android.os.Build; +import android.os.Handler; import android.support.annotation.NonNull; import android.telephony.TelephonyManager; import android.text.TextUtils; @@ -244,8 +245,33 @@ public class MapboxEventManager { context.startService(new Intent(context, TelemetryService.class)); // Make sure Ambient Mode is started at a minimum - if (LocationServices.getLocationServices(context).isGPSEnabled()) { - LocationServices.getLocationServices(context).toggleGPS(false); + if (LocationServices.getLocationServices(context).areLocationPermissionsGranted()) { + Log.i(TAG, "Permissions are good, see if GPS is enabled and if not then setup Ambient."); + if (LocationServices.getLocationServices(context).isGPSEnabled()) { + LocationServices.getLocationServices(context).toggleGPS(false); + } + } else { + // Start timer that checks for Permissions + Log.i(TAG, "Permissions are not good. Need to do some looping to check on stuff."); + + final Handler permsHandler = new Handler(); + Runnable runnable = new Runnable() { + @Override + public void run() { + if (LocationServices.getLocationServices(context).areLocationPermissionsGranted()) { + Log.i(TAG, "Permissions finally granted, so starting Ambient if GPS isn't already enabled"); + // Start Ambient + if (LocationServices.getLocationServices(context).isGPSEnabled()) { + LocationServices.getLocationServices(context).toggleGPS(false); + } + } else { + // Restart Handler + Log.i(TAG, "Permissions not granted yet... let's try again in 30 seconds"); + permsHandler.postDelayed(this, 1000 * 30); + } + } + }; + permsHandler.postDelayed(runnable, 1000 * 10); } // Manage Timer Flush |