如果不使用意图并传递额外参数,是否可以确定哪个活动启动了当前活动?

最佳答案

有两种方法。
普通的那个
在呼叫活动中使用startActivityForResult启动活动。这里我使用ActivityCompat来实现向后兼容。

ActivityCompat.startActivityForResult(this, new Intent(this, MyActivity.class), 0, null);

然后在被调用方活动中,可以使用以下代码检测调用活动。
    if (getCallingActivity() != null) {
        Log.d(TAG, getCallingActivity().getClassName());
    }

注意
在调用活动中,如果不需要从被调用活动传输数据,则不必实现onActivityResult
弃用的那个
使用系统的后堆栈获取最近的任务。但是在API21之后它就不起作用了,在API21之后它就被弃用了。
最重要的是宣布必要的许可。
<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());
}

10-07 23:06