Ni el usuario 10102 ni el proceso actual tienen android.permission.READ_PHONE_STATE

Estoy tratando de llamar al método getCallCapablePhoneAccounts () de la clase android.telecom.TelecomManager . Aunque he añadido el permiso de usuario requerido, estoy recibiendo la excepción de seguridad .

Aquí está la línea de código donde estoy recibiendo la excepción

List<PhoneAccountHandle> list = getTelecomManager().getCallCapablePhoneAccounts(); 

Permiso de usuario agregado en manifiesto

 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 

Excepción stacktrace Causado por: java.lang.SecurityException: getDefaultOutgoingPhoneAccount: Ni el usuario 10102 ni el proceso actual tiene android.permission.READ_PHONE_STATE. En android.os.Parcel.readException (Parcel.java:1599) en android.os.Parcel.readException (Parcel.java:1552) en com.android.internal.telecom.ITelecomService $ Stub $ Proxy.getDefaultOutgoingPhoneAccount (ITelecomService.java : 615) en android.telecom.TelecomManager.getDefaultOutgoingPhoneAccount (TelecomManager.java:439)

¿Estás ejecutando Android M? Si es así, esto es porque no es suficiente para declarar permisos en el manifiesto. Para algunos permisos, tiene que pedir explícitamente al usuario en el tiempo de ejecución: http://developer.android.com/training/permissions/requesting.html

En Android> = 6.0, tenemos que solicitar el tiempo de ejecución del permiso.

Paso1: agregar en el archivo AndroidManifest.xml

 <uses-permission android:name="android.permission.READ_PHONE_STATE"/> 

Paso 2: Pedir permiso.

  int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE); if (permissionCheck != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_PHONE_STATE}, REQUEST_READ_PHONE_STATE); } else { //TODO } 

Paso 3: Gestionar la devolución de llamada cuando solicite permiso.

 @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case REQUEST_READ_PHONE_STATE: if ((grantResults.length > 0) && (grantResults[0] == PackageManager.PERMISSION_GRANTED)) { //TODO } break; default: break; } } 

Editar: Lea la guía oficial aquí Solicitando permisos en tiempo de ejecución

Estaba experimentando este problema en dispositivos Samsung (bien en otros). Como zyamys sugirió en su comentario, agregué la línea manifest.permission pero además de en vez de en lugar de la línea original, así:

 <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.Manifest.permission.READ_PHONE_STATE" /> 

Estoy apuntando API 22, así que no necesito solicitar explícitamente permisos.

  • Android 6.0 no está autorizado a actualizar la red inalámbrica cuando se reinstala la aplicación
  • Acceso a la red en modo doze
  • Control de linterna en Marshmallow
  • No se puede cambiar al modo Doze
  • Problema de permiso de Android 6 (M) (el directorio de creación no funciona)
  • Android M escribe en la tarjeta SD - Permiso denegado
  • Cómo obtener la ruta SD_Card en android6.0 mediante programación
  • Ampliación de Byte a Int (bicho Marshmallow)
  • Android: utiliza la API de huellas dactilares en la API de Android 17
  • ¿Error de Android 6.0? Tengo permiso pero getScanResults () todavía devuelve la lista vacía en Android 6.0
  • ConnectivityManager.requestNetwork en Android 6.0
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.