美文网首页
得到Activity Caller的几种思路

得到Activity Caller的几种思路

作者: 董成鹏 | 来源:发表于2019-12-30 20:21 被阅读0次

如何得到一个Activity的Caller.

有以下几种思路:

  1. Binder的getCallingUid和getCallingPid, 这两个方法只在onTransact方法中有效, 其余的方法中会得到当前App的UID和PID, 而不是caller的UID和PID.

  2. Activity的getCallingPackage和getCallingActivity, 这两个方法只有在caller通过startActivityForResult的时候才有效, 而且caller必须是活着的, 否则得到的是空.

  3. Activity的getReferer方法, 这个方法也不靠谱, 因为应用可以通过给Intent设置EXTRA_REFERER_NAME和EXTRA_REFERER来改变这个方法的返回值.

  4. 最后最靠谱的一个方法是通过反射Activity的mReferer属性, 来得到真正的caller, 这个只在5.0以上的机器上有效. 但是这个方法有一个弊端, 它得到的是第一次创建这个Activity的caller, 如果这个Acitivity已经被创建过了, 然后又通过其他intent被推到前台, 那么这个Activity的caller还是创建它的那个, 而不是再次把它推到前台的那个.

相关文章

网友评论

      本文标题:得到Activity Caller的几种思路

      本文链接:https://www.haomeiwen.com/subject/votvoctx.html