varios studio requestpermissions permisos pedir onrequestpermissionsresult multiples example administrador android android-permissions android-6.0-marshmallow

requestpermissions - permisos gps android studio



Solicitar permisos de ubicaciĆ³n de un servicio Android M (2)

Estoy usando un servicio que al arrancar se inicia y comienza a buscar actualizaciones de ubicación. Una vez que niego el acceso a la ubicación en la ventana emergente de permisos ahora gracias a Android M, mi servicio falla una vez que el teléfono se inicia.

Como no tengo actividad en este caso, la llamada a requestPermissions() devuelve una ClassCastException ya que el Context mi servicio no se puede convertir a una actividad.

Mi llamada al método:

ActivityCompat.requestPermissions((Activity) mContext, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_COARSE_LOCATION);

¿Hay alguna solución hasta ahora para O tengo que revocar los derechos del servicio para NO ejecutar en tal estado?


No puede solicitar permiso a través de un servicio, ya que un servicio no está vinculado a una IU, este tipo de información tiene sentido. Como el contexto de un servicio no es una actividad, la excepción que recibes tiene sentido.

Puede verificar si el permiso está disponible en un servicio y solicitar el permiso en una actividad (sí, necesita una actividad).

En un servicio:

public static boolean checkPermission(final Context context) { return ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_COARSE_LOCATION) == PackageManager.PERMISSION_GRANTED; }

y en una actividad:

private void showPermissionDialog() { if (!LocationController.checkPermission(this)) { ActivityCompat.requestPermissions( this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION, Manifest.permission.ACCESS_FINE_LOCATION}, PERMISSION_LOCATION_REQUEST_CODE); } }


Puede verificar los permisos sin Actividad utilizando el contexto de la aplicación, pero necesitará Actividad cuando solicite permiciones. Para obtener el contexto de la aplicación simplemente llame a getApplicationContext() y para verificar los permisos use ContextCompat.checkSelfPermission() lugar.

También hay buena información sobre cómo usar los permisos de tiempo de ejecución de la manera correcta :

Para verificar si tiene un permiso, llame al método ContextCompat.checkSelfPermission() . Por ejemplo, este fragmento muestra cómo verificar si la actividad tiene permiso para escribir en el calendario:

// Assume thisActivity is the current activity int permissionCheck = ContextCompat.checkSelfPermission(thisActivity, Manifest.permission.WRITE_CALENDAR);

Si la aplicación tiene el permiso, el método devuelve PackageManager.PERMISSION_GRANTED y la aplicación puede continuar con la operación. Si la aplicación no cuenta con el permiso, el método devuelve PERMISSION_DENIED , y la aplicación debe solicitar explícitamente permiso al usuario.

Editar: Después de verificar las permiciones en el servicio, necesitarás la Actividad para solicitar la permición:

public static void requestPermissions (Activity activity, String[] permissions, int requestCode)