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

Estoy intentando llamar al método getCallCapablePhoneAccounts () de la clase android.telecom.TelecomManager . Aunque he agregado el permiso de usuario requerido, recibo una excepción de seguridad .

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

List list = getTelecomManager().getCallCapablePhoneAccounts(); 

permiso de usuario agregado en manifiesto

  

Exception 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 se debe a que no es suficiente para declarar permisos en el manifiesto. Para algunos permisos, debes preguntar explícitamente al usuario en el tiempo de ejecución: http://developer.android.com/training/permissions/requesting.html

En Android> = 6.0, debemos solicitar permiso de ejecución.

Paso 1: agregue el archivo AndroidManifest.xml

  

Paso 2: solicitar 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: maneje la callback 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í Solicitud de permisos en tiempo de ejecución

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

   

Me estoy orientando a la API 22, por lo que no es necesario que pidas explícitamente los permisos.