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
- Android M: Canvas strokeWidth y strokeStyle problema al dibujar arcos
- Opción de fuente de audio en la opción de desarrollador en Android M
- SMSMessage createFromPdu con formato de parámetro adicional
- Wakelock y modo doze
- Detección del estado de Doze
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)
- Aplicación personalizada no creada en Android M (vista previa final)
- Apache conexión HTTP con Android 6.0 (Marshmallow)
- ListFiles () devuelve null en el emulador de Android 6.0
- Cómo cambiar programaticamente la configuración WiFi en Android 6 (M)?
- Desconexión por programación de la llamada en la versión Android de Marshmallow
- Una aplicación de Android recuerda sus datos después de desinstalar y reinstalar
- Prueba de espera y modo de espera
- Android M: VoIP, JAINSIP, SipStack; Inconsistent SipProvider Excepción al crear un punto de escucha con tls habilitado
¿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.