With the recent Marshmallow update, even if location adjustment is enabled, your application will need to explicitly request permission. The recommended way to do this is to show the "Permissions" section of your application, in which the user can switch the resolution as necessary. The code snippet for this is as follows:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { if (this.checkSelfPermission(Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { final AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Location Permission"); builder.setMessage("The app needs location permissions. Please grant this permission to continue using the features of the app."); builder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { requestPermissions(new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, PERMISSION_REQUEST_COARSE_LOCATION); } }); builder.setNegativeButton(android.R.string.no, null); builder.show(); } } else { LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); boolean isGpsProviderEnabled, isNetworkProviderEnabled; isGpsProviderEnabled = locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER); isNetworkProviderEnabled = locationManager.isProviderEnabled(LocationManager.NETWORK_PROVIDER); if(!isGpsProviderEnabled && !isNetworkProviderEnabled) { final AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Location Permission"); builder.setMessage("The app needs location permissions. Please grant this permission to continue using the features of the app."); builder.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); startActivity(intent); } }); builder.setNegativeButton(android.R.string.no, null); builder.show(); } }
And override the onRequestPermissionsResult
method as shown below:
@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case PERMISSION_REQUEST_COARSE_LOCATION: { if (grantResults[0] == PackageManager.PERMISSION_GRANTED) { Log.d(TAG, "coarse location permission granted"); } else { Intent intent = new Intent(); intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); Uri uri = Uri.fromParts("package", getPackageName(), null); intent.setData(uri); startActivity(intent); } } } }
Another approach - you can also use SettingsApi to find out which location providers are included. If none are activated, you can request a dialog to change settings from the application.
Mahendra liya
source share