Android checkCallingOrSelfPermission nicht wieder richtig

Ich Schreibe einen service, der sehen muss, wenn seine Anrufer hält ein bestimmtes eigenes Genehmigung. Ich will nicht, um zu verhindern, dass Anrufer, die ohne diese Erlaubnis, ich will nur wissen, den status, so dass ich entsprechend reagieren können. Es scheint, dass die Kontext-Methode checkCallingPermission() ist perfekt für das, was ich brauche, Rückgabe 0 wenn der Anrufer die angegebene Berechtigung und -1 sonst. Ich finde, dass -1 zurückgegeben wird, in allen Fällen aber.

Schrieb ich einen test-Fall (mit der ähnlichen Methode checkCallingOrSelfPermission() wo ich zog mein Paket ist PackageInfo aus dem system, aufgezählt jede meiner Berechtigungen (nur eine Anfrage nach Paket) und zeigt das Ergebnis der checkCallingOrSelfPermission(). Da die Berechtigungen, die ich überprüft in diesem Fall sind genau die Berechtigungen, die ich halten, würde ich erwarten, dass checkCallingOrSelfPermission() auf 0 zurück (PackageManager.PERMISSION_GRANTED) nur... kaufen, es gibt nur -1 (PackageManager.PERMISSION_DENIED).

Habe ich diese überprüft und erhielt die gleichen Ergebnisse auf 4.0 emulator und einem 2.3 Gerät.

Irgendeine Idee, was ich falsch mache, verursachen diese Anrufe zu scheitern?

Meinem test-manifest beinhaltet:

<permission
    android:protectionLevel="signatureOrSystem"
    android:name="abcd" />
<uses-permission android:name="abcd" />

Meinem test-Aktivität-code:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    PackageManager pm = getPackageManager();
    try {
        PackageInfo pi = pm.getPackageInfo("com.test.check", PackageManager.GET_PERMISSIONS);
        if ((null == pi.requestedPermissions) ||
            (pi.requestedPermissions.length == 0)) {
            Log.d("CHECK", "Package has NO permissions!");
            finish();
            return;
        }

        for (int i = 0; i < pi.requestedPermissions.length; ++i) {
            Log.d("CHECK", pi.requestedPermissions[i] + " " + checkCallingOrSelfPermission(pi.requestedPermissions[i]));
        }
    } catch (NameNotFoundException e) {
        Log.d("CHECK", "Package name is wrong!");
    }

    finish();
}

und meine Ergebnisse sind:

D/CHECK   ( 3600): abcd -1
InformationsquelleAutor mah | 2012-07-10
Schreibe einen Kommentar