如何在Android中找到Intent源?

时间:2011-01-25 01:36:31

标签: android android-intent resolution

  

可能重复:
  Android: How to get the sender of an Intent?

在Android中是否有办法找到触发INTENT的源活动(在目标活动中)?

场景是我有两个活动A和B.两个人都打算调用活动C. 活动C根据其来源显示额外信息。例如。如果来自A的呼叫则C仅显示2个文本视图,而在B触发的意图的情况下,活动C显示3个文本视图(基本上更多的信息基于谁是呼叫者)。

为了确定这一点,我需要知道是谁解雇了调用C的意图。我该怎么做?

4 个答案:

答案 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有任何控制权,你可以让他们调用已经提到的结果。