getCallingUid/getCallingPid在Handler.handleMessage中返回当前的uid和pid

Dyl*_*lan 5 android

我有一个课程延伸android.os.Handler.该处理程序的一个实例被传递给a的构造函数Messenger.该MessengerIBinder距离getBinder作为的结果,通过onBind我的服务事件.通过绑定程序从远程应用程序发送的消息确实转到处理程序的handleMessage方法,但是对内部Binder.getCallingUidBinder.getCallingPid内部的调用handleMessage始终返回服务进程的uid和pid(这绝对不是与远程应用程序相同的进程).handleMessage绝对是IPC交易的一部分,不是吗?那么我哪里出错了?我需要这个来处理连接应用程序的身份验证.

提前致谢.

编辑

好.我有这种可怕的感觉,handleMessage它不是IPC事务的一部分,因为它发生在AIDL的单独线程中,它将消息放入队列中Messenger.有没有其他方法来获取呼叫者的用户ID和进程ID?

ein*_*ins 6

创建一个自定义Handler类并覆盖sendMessageAtTime(这是该类中唯一可覆盖的发布方法Handler),然后使用它来创建一个Messenger返回的onBind.

在该sendMessageAtTime方法中,您可以通过getCallingPid和获取调用远程应用程序的pid/uid getCallingUid.

但是,在使用IPC时Messenger,与使用AIDL相反,getCallingPid将始终返回0,因为远程应用程序发送的消息是异步的; 与...交易IBinder.FLAG_ONEWAY.因此,uid是唯一可用的信息.