/ / ¿Cómo manejar el permiso ACCESS_FINE_LOCATION en Android 6.0? [duplicado] - android, ubicación

¿Cómo manejar el permiso ACCESS_FINE_LOCATION en Android 6.0? [duplicado] - Android, ubicación

Cuando inicio mi LocationService en un dispositivo con Android versión 6.0 o superior, aparece el siguiente error:

java.lang.SecurityException: el cliente debe tener permiso ACCESS_FINE_LOCATION para solicitar ubicaciones PRIORITY_HIGH_ACCURACY. en android.os.Parcel.readException (Parcel.java:1620) en android.os.Parcel.readException (Parcel.java:1573) en com.google.android.gms.internal.ni $ a $ a.a (fuente desconocida) en com.google.android.gms.internal.nj.a (fuente desconocida) en com.google.android.gms.internal.nk.a (fuente desconocida) en com.google.android.gms.internal.nf $ 1.a (fuente desconocida) en com.google.android.gms.internal.nf $ 1.a (fuente desconocida) en com.google.android.gms.common.api.BaseImplementation $ a.b (fuente desconocida) en com.google.android.gms.common.api.c.a (fuente desconocida) en com.google.android.gms.common.api.c.b (fuente desconocida) en com.google.android.gms.internal.nf.requestLocationUpdates (fuente desconocida) en com.google.android.gms.internal.jm.f (fuente desconocida) en com.google.android.gms.common.api.c.gJ (fuente desconocida) en com.google.android.gms.common.api.c.d (fuente desconocida) en com.google.android.gms.common.api.c $ 2.onConnected (fuente desconocida) en com.google.android.gms.internal.jm.f (fuente desconocida) en com.google.android.gms.internal.jm.dU (fuente desconocida) en com.google.android.gms.internal.jl $ h.b (fuente desconocida) en com.google.android.gms.internal.jl $ h.g (fuente desconocida) en com.google.android.gms.internal.jl $ b.hy (fuente desconocida) en com.google.android.gms.internal.jl $ a.handleMessage (fuente desconocida) en android.os.Handler.dispatchMessage (Handler.java:102) en android.os.Looper.loop (Looper.java:148) en android.app.ActivityThread.main (ActivityThread.java:5466) en java.lang.reflect.Method.invoke (Método nativo) en com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:726) en com.android.internal.os.ZygoteInit.main (ZygoteInit.java:616)

He establecido los permisos necesarios en el Manifest.xml! Luego leí que los permisos se manejan de manera diferente en Android 6.0, pero ¿cómo puedo pedirle al usuario que acepte o establezca los permisos necesarios para la aplicación?

¿Alguna sugerencia?

Respuestas

2 para la respuesta № 1

Primero verifique si el permiso ya está otorgado

if (ContextCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(new String[]{Manifest.permission.CAMERA}, 108);
return;
} else {
//continueYourTask
}

Si no se otorga, muestra automáticamente un cuadro de diálogo para otorgar acceso y cuando se le otorga una devolución de llamada se recibe como

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 108:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
//continueYourTask
}
break;
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}