如果不使用Intent并传递额外的参数,是否可以确定哪个Activity启动了当前的Activity?
答案 0 :(得分:4)
有两种方法可以做。
在您的通话活动中使用startActivityForResult
来启动活动。在这里,我使用ActivityCompat
来实现向后兼容。
ActivityCompat.startActivityForResult(this, new Intent(this, MyActivity.class), 0, null);
然后在被调用者活动中,您可以使用以下代码来检测调用活动。
if (getCallingActivity() != null) {
Log.d(TAG, getCallingActivity().getClassName());
}
注意强>
在调用活动中,如果您不需要来自被调用者活动的传输数据,则不必实现onActivityResult
。
使用系统的后台堆栈来获取最近的任务。但它在API 21之后不起作用,它在API 21之后被弃用。
在mainifest中声明必要的权限。
<uses-permission android:name="android.permission.GET_TASKS" />
然后在你的被叫活动中
ActivityManager activityManager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
for (ActivityManager.RecentTaskInfo taskInfo : activityManager.getRecentTasks(1, 0)) {
Log.d(TAG, taskInfo.baseIntent.getComponent().getClassName());
}
答案 1 :(得分:0)
只有我想到的东西才是带有&#34; lastActivity&#34;的HashMap。 &#34;活动&#34;关键和价值。 它将是静态的,因此您可以在每个Activity咒语上更新它。 或者将其保存为SharedPreferences但与HashMap相同... 希望它有所帮助,最好的问候!
答案 2 :(得分:0)
您的应用程序类允许设置ActivityLifecycleListener
。每当新活动触及onCreate()
时,您都可以将活动toString()
或getClass().getSimpleName()
等内容推送到一堆字符串上,然后使用它来识别它。