web-dev-qa-db-fra.com

Android.permission.READ_PHONE_STATE ni l'utilisateur 10102 ni le processus en cours

J'essaie d'appeler getCallCapablePhoneAccounts () méthode de Android.telecom.TelecomManager classe. Bien que j'aie ajouté l'autorisation d'utilisateur requise, j'obtiens une exception de sécurité .

Voici la ligne de code où je reçois une exception

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

autorisation utilisateur ajoutée dans le manifeste

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

Exception stacktrace Causée par: Java.lang.SecurityException: getDefaultOutgoingPhoneAccount: ni l'utilisateur 10102 ni le processus en cours n'ont Android.permission.READ_PHONE_STATE. sur Android.os.Parcel.readException (Parcel.Java:1599) sur Android.os.Parcel.readException (Parcel.Java:1552) sur com.Android.internal.telecom.ITelecomService $ Stub $ Proxy.getDefaultOutgoingPhoneAccount (ITelecomService.Just : 615) sur Android.telecom.TelecomManager.getDefaultOutgoingPhoneAccount (TelecomManager.Java:439)

61
Prasad

Sur Android> = 6.0, nous devons demander l'autorisation d'exécution.

Étape 1: ajouter dans le fichier AndroidManifest.xml

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

Étape 2: Demander une autorisation.

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
}

Étape 3: gérez le rappel lorsque vous demandez une autorisation.

@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;
    }
}

Edit: Lisez le guide officiel ici Demande de permission à l'exécution

70
sonnv1368

Utilisez-vous Android M? Si c'est le cas, cela est dû au fait qu'il n'est pas suffisant de déclarer des autorisations dans le manifeste. Pour certaines autorisations, vous devez explicitement demander à l'utilisateur lors de l'exécution: http://developer.Android.com/training/permissions/requesting.html

54
LVR

Je rencontrais ce problème sur les appareils Samsung (bien sur d'autres). comme zyamys suggéré dans son commentaire, j'ai ajouté la ligne manifest.permission mais en plus de plutôt que la ligne d'origine, ainsi:

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

Je cible l'API 22, il n'est donc pas nécessaire de demander explicitement des autorisations.

8
mrrrk