如何在Android中find意图源?

可能重复:
Android:如何获得一个意图的发件人?

有没有办法在androidfind触发一个INTENT的源活动(在目标活动)?

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

为了build立这个,我需要知道是谁开了C的意图 。 我如何做到这一点?

更好的方法是使用Intent extras将parameter passing给接收者。

如果我们看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; 

我不认为这些成员中包括发件人的信息,对问题没有回答。 你不能这样做的任意意图。

可能这被认为是一个解决方法?

让A&B调用startActivityForResult而不是startActivity ,然后可以调用getCallingActivity().getClassName()来检索源代码。

如果应用程序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 

在我的testing中,我发现最近任务堆栈顶部的baseIntent是最可靠的标识符。 有更多的讨论为什么你可能不想这样做在https://stackoverflow.com/a/12376775/1135142

我想如果你对A和B有任何控制,你可以让他们调用已经提到的结果。