Android에서 이와 같은 시나리오가 발생합니다. 앱 A
은 정보를 얻기 위해 허가 PERM
을 가지고 있습니다. 이 정보를 직접받는 대신 응용 프로그램 B
(물론 B
은 PERM
) 내의 하나의 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
년대)를 반환합니다. 나는 A
과 B
이 다른 PID를 가지고 있음을 확인할 수 있습니다.
업데이트는 이전에 나는 BroadCastReceiver
때문이다 생각하고 있었다, 그래서 나는 A
에서 startActivity
에 노력하고 B
에서 활동을 시작합니다. 다시 checkCallingPermission
동안 다시 실패합니다. 놀랍게도 여전히 동일한 PID를 반환합니다.
checkCallingPermission
을 사용하는 올바른 방법은 무엇입니까? 당신이 취급하고있는 IPC가 주어진 권한을 가지고 있으며,이 권한에 해당하는 응용 프로그램의 연산이 허용되는지 여부를 여부를
도 패키지 이름을'A'로 설정하면 작동하지 않는 것 같습니다. –