我有一个扩展android.os.Handler的类。此处理程序的一个实例传递给Messenger的构造函数。 Messenger中的IBindergetBinder作为onBind事件在我的服务中传递的结果。通过绑定(bind)器从远程应用程序发送的消息确实会转到处理程序的handleMessage方法,但是对Binder.getCallingUid中的Binder.getCallingPidhandleMessage的调用始终返回服务进程的uid和pid(与远程应用程序绝对不是同一进程)。 handleMessage绝对是IPC事务的一部分,不是吗?那我哪里出问题了?我需要使用它来进行连接应用程序的身份验证。

提前致谢。

编辑

好的。我感到这种可怕的感觉是handleMessage不属于IPC事务,因为这发生在AIDL的单独线程中,该线程将消息放入Messenger的队列中。还有其他方法来获取调用者的用户ID和进程ID吗?

最佳答案

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

sendMessageAtTime方法中,您可以通过getCallingPidgetCallingUid获取正在调用的远程应用程序的pid/uid。

但是,在IPC中,使用Messenger而不是使用AIDL,由于远程应用程序发送的消息是异步的,因此getCallingPid将始终返回0。使用IBinder.FLAG_ONEWAY进行交易。
因此,uid是唯一可用的信息。

10-07 12:52