2016-06-20 1 views
0

Android에서 이와 같은 시나리오가 발생합니다. 앱 A은 정보를 얻기 위해 허가 PERM을 가지고 있습니다. 이 정보를 직접받는 대신 응용 프로그램 B (물론 BPERM) 내의 하나의 BroadCastReceiver에 인 텐트를 보냅니다. A과 같은 모든 응용 프로그램에 권한이 부여되도록하려면 context.checkCallingPermission (this answer의 도움으로)을 사용합니다.Context.checkCallingPermission 검사가 항상 실패합니까?

그러나 항상 실패합니다. 내가 A에서 의도를 보낼 때

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); 
    } 
} 

특히, 주석 라인은 항상 동일 PID (B 년대)를 반환합니다. 나는 AB이 다른 PID를 가지고 있음을 확인할 수 있습니다.

업데이트는 이전에 나는 BroadCastReceiver 때문이다 생각하고 있었다, 그래서 나는 A에서 startActivity에 노력하고 B에서 활동을 시작합니다. 다시 checkCallingPermission 동안 다시 실패합니다. 놀랍게도 여전히 동일한 PID를 반환합니다.

checkCallingPermission을 사용하는 올바른 방법은 무엇입니까? 당신이 취급하고있는 IPC가 주어진 권한을 가지고 있으며,이 권한에 해당하는 응용 프로그램의 연산이 허용되는지 여부를 여부를

답변

0

사용이

checkCallingPermission(Context context, String permission, String packageName)

확인을 methdos.

+0

도 패키지 이름을'A'로 설정하면 작동하지 않는 것 같습니다. –