2016-06-20 11 views
0

Ich stoße auf ein solches Szenario in Android. App A hat Erlaubnis PERM, um einige Informationen zu erhalten. Anstatt diese Information direkt zu erhalten, sendet es eine Absicht an einen BroadCastReceiver innerhalb der App B (natürlich B hat PERM). Um sicherzustellen, dass alle diese Apps wie A die Berechtigung haben, verwende ich eine context.checkCallingPermission (mit Hilfe von this answer).Context.checkCallingPermission-Überprüfung schlägt immer fehl?

Es schlägt jedoch immer fehl.

public void onReceive(Context context, Intent intent) { 
    String info; 
    String perm = Manifest.permission.READ_PHONE_STATE; 
    Log.i(TAG, "callPid="+ Binder.getCallingPid()+" myPid="+ Process.myPid()); /// SAME PID 
    if (context.checkCallingPermission(perm) != PackageManager.PERMISSION_GRANTED) { 
     Log.i(TAG, "not granted " + perm); 
     info = "denied perm " + perm; 
    } else { 
     Log.i(TAG, perm + " already granted"); 
     info = dumpDeviceInfoImpl(context); 
    } 
} 

Speziell die Kommentarzeile zurückkehren immer SAME pid (B ‚s), wenn ich Absicht von A senden. Ich kann bestätigen, A und B haben unterschiedliche PIDs.

Update

Früher dachte ich es BroadCastReceiver zurückzuführen ist, so habe ich versucht zu startActivity von A und dann eine Aktivität in B starten. Erneut, während checkCallingPermission, schlägt es erneut fehl. Überraschenderweise immer noch die gleiche PID.

Also, was ist die richtige Art zu verwenden checkCallingPermission?

Antwort

0

Verwendung dieses methdos

checkCallingPermission(Context context, String permission, String packageName)

Prüft, ob die IPC Sie Umgang mit einer bestimmten Berechtigung hat, und ob die App op, die zu dieser Berechtigung entspricht, ist zulässig.

+0

scheint auch nicht zu funktionieren, wenn ich packageName auf 'A's setze. –