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
?
scheint auch nicht zu funktionieren, wenn ich packageName auf 'A's setze. –