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 № 1Primero 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);
}
}