私はAndroidでこのようなシナリオに遭遇しています。 App A
には、情報を取得するための許可PERM
があります。この情報を直接取得する代わりに、アプリケーションB
(もちろんB
はPERM
)内の1つのBroadCastReceiverにインテントを送信します。 A
のようなアプリをすべて許可するには、context.checkCallingPermission(this answerの助けを借りて)を使用します。Context.checkCallingPermissionのチェックは常に失敗しますか?
ただし、常に失敗します。
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);
}
}
私はA
から意図を送信するときに特別に、コメント行は常に、同じPID(B
年代)を返します。私はA
とB
が異なるPIDを持っていることを確認できます。
更新は以前、私はそれがBroadCastReceiver
に起因して考えていたので、私はA
からstartActivity
しようとしたし、その後B
での活動を開始します。再度、checkCallingPermission
の間、再び失敗します。驚いたことに、まだ同じPIDを返す。
checkCallingPermission
を使用する正しい方法は何ですか?
のいずれかが動作していないようです。packageNameに 'A'を設定したときです。 –