有没有办法Activity
找出谁(即班级名称)发送了Intent
?我正在寻找一种通用的方式让我Activity
回复收到的意图,然后将一个回发给发件人,无论是谁.
And*_*ang 30
可能有另一种方式,但我知道的是具有活性甲唯一的解决方案通过调用活动B startActivityForResult()
.然后,活动B可用于getCallingActivity()
检索活动A的身份.
don*_*uxx 14
它是你收到意图的外部应用程序吗?您可以使用getReferrer()
活动类的方法
一个简单的例子:我打开谷歌地图应用程序,通过使用谷歌地图的共享选项与我的应用程序共享一些位置.然后我的应用程序打开,此方法调用Activity:
this.getReferrer().getHost()
Run Code Online (Sandbox Code Playgroud)
将返回:
com.google.android.apps.maps
Run Code Online (Sandbox Code Playgroud)
请参阅此处的文档:https://developer.android.com/reference/android/app/Activity.html#getReferrer()
请注意,这需要API 22.对于较旧的Android版本,请参阅ajwillliams的回答
小智 9
我使用的一种技术是要求应用程序发送相关的Intent以将PendingIntent添加为Parcelable extra; PendingIntent可以是任何类型(服务,广播等).我的服务唯一的作用是调用PendingIntent.getCreatorUid()和getCreatorPackage(); 创建PendingIntent时会填充此信息,并且应用程序无法伪造此信息,因此我可以获取有关Intent发件人的信息.唯一需要注意的是,解决方案只适用于Jellybean,后来就是我的情况.希望这可以帮助,
小智 8
这不是非常直接,但您可以从ActivityManager获取最近任务的列表.所以调用者基本上是你之前的任务,你可以获取该任务的信息.
用法示例:
ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RecentTaskInfo> recentTasks = am.getRecentTasks(10000,ActivityManager.RECENT_WITH_EXCLUDED);
Run Code Online (Sandbox Code Playgroud)
以上将返回从最近(您的)到指定限制的所有任务的列表.有关可从RecentTaskInfo对象获取的信息类型,请参阅此处的文档.
通常你不需要知道这一点.如果调用活动使用startActivityForResult(Intent, int)
,则被调用者可以使用setResult(int, Intent)
指定要发送回调用者的Intent.调用者将在其onActivityResult(int, int, Intent)
方法中接收此Intent .
归档时间: |
|
查看次数: |
37200 次 |
最近记录: |