2016-06-20 1 views
0

私はAndroidでこのようなシナリオに遭遇しています。 App Aには、情報を取得するための許可PERMがあります。この情報を直接取得する代わりに、アプリケーションB(もちろんBPERM)内の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年代)を返します。私はABが異なるPIDを持っていることを確認できます。

更新は以前、私はそれがBroadCastReceiverに起因して考えていたので、私はAからstartActivityしようとしたし、その後Bでの活動を開始します。再度、checkCallingPermissionの間、再び失敗します。驚いたことに、まだ同じPIDを返す。

checkCallingPermissionを使用する正しい方法は何ですか?

答えて

0

使用これは、あなたが扱っているIPCが与えられた権限を持っており、この権限に該当するアプリのOPが許可されているかどうかかどうか

checkCallingPermission(Context context, String permission, String packageName)

チェックしmethdos。

+0

のいずれかが動作していないようです。packageNameに 'A'を設定したときです。 –

関連する問題