如何在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有任何控制,你可以让他们调用已经提到的结果。
- Android如何获得AppCompat.Translucenttypes的主题与支持操作栏?
- 如何使列表视图中的项目在Android中不可点击
- ListView与OnItemClickListener android
- 如何使用Material Design App的自定义颜色创build自定义调色板?
- Android:BitmapFactory.decodeStream()内存不足,带有2MB空闲堆的400KB文件
- 如何在Android应用程序中安全地存储凭据(密码)?
- Android上文件名称允许使用哪些字符?
- Android:SlidingDrawer的高度可以用wrap_content来设置吗?
- 开始活动后立即调用OnPause和OnStop()