在Android中是否有办法找到触发INTENT的源活动(在目标活动中)?
场景是我有两个活动A和B.两个人都打算调用活动C. 活动C根据其来源显示额外信息。例如。如果来自A的呼叫则C仅显示2个文本视图,而在B触发的意图的情况下,活动C显示3个文本视图(基本上更多的信息基于谁是呼叫者)。
为了确定这一点,我需要知道是谁解雇了调用C的意图。我该怎么做?
答案 0 :(得分:26)
更好的方法是使用Intent extras将参数传递给接收器。
答案 1 :(得分:26)
如果我们查看Intent.java类,我们可以看到仅包含
的成员private String mAction;
private Uri mData;
private String mType;
private String mPackage;
private ComponentName mComponent;
private int mFlags;
private HashSet<String> mCategories;
private Bundle mExtras;
我认为这些成员中没有任何成员包含发件人信息,因此对问题的回答是否定的。你无法为任意意图这样做。
答案 2 :(得分:15)
这可能被认为是一种解决方法吗?
有A&amp; B拨打startActivityForResult
而不是startActivity
,然后您可以致电getCallingActivity().getClassName()
来检索来源。
答案 3 :(得分:3)
如果应用C具有GET_TASKS权限,您可以看到最近的任务是什么。
ActivityManager man = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RecentTaskInfo> list = man.getRecentTasks(1, 0);
//You might want to check if(list.size() > 0)
Intent caller = list.get(0).baseIntent;
//look at caller.getComponent() for the package and class
在我的测试中,我发现最近任务堆栈顶部的baseIntent是最可靠的标识符。有关您可能不希望在https://stackoverflow.com/a/12376775/1135142
中执行此操作的原因的讨论更多我想如果你对A和B有任何控制权,你可以让他们调用已经提到的结果。