如何得到一个Activity的Caller.
有以下几种思路:
-
Binder的getCallingUid和getCallingPid, 这两个方法只在onTransact方法中有效, 其余的方法中会得到当前App的UID和PID, 而不是caller的UID和PID.
-
Activity的getCallingPackage和getCallingActivity, 这两个方法只有在caller通过startActivityForResult的时候才有效, 而且caller必须是活着的, 否则得到的是空.
-
Activity的getReferer方法, 这个方法也不靠谱, 因为应用可以通过给Intent设置EXTRA_REFERER_NAME和EXTRA_REFERER来改变这个方法的返回值.
-
最后最靠谱的一个方法是通过反射Activity的mReferer属性, 来得到真正的caller, 这个只在5.0以上的机器上有效. 但是这个方法有一个弊端, 它得到的是第一次创建这个Activity的caller, 如果这个Acitivity已经被创建过了, 然后又通过其他intent被推到前台, 那么这个Activity的caller还是创建它的那个, 而不是再次把它推到前台的那个.
网友评论