我想知道,是否有可能在运行时获得Activity所属的Activity的名称?
我找遍了,却找不到办法去做。
发布于 2020-11-25 10:11:37
活动的亲缘关系由taskAffinity属性定义。任务的亲和力是通过读取其根活动的亲和力来确定的。因此,根据定义,根活动始终处于具有相同亲缘关系的任务中。
因此,要获得活动的taskAffinity,我们将获得根活动的taskAffinity (堆栈底部的活动)。
以下是解决办法:
ActivityUtils.java
public static String getTaskAffinity(Activity activity) {
ActivityManager am = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.AppTask> appTaskList = am.getAppTasks();
int taskId;
for (ActivityManager.AppTask appTask : appTaskList) {
ActivityManager.RecentTaskInfo taskInfo = appTask.getTaskInfo();
// Get the id of the task
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.Q) {
taskId = taskInfo.id;
} else {
taskId = taskInfo.taskId;
}
// Detect the task that the activity is belonged to
if (activity.getTaskId() == taskId) {
ComponentName rootActivity = taskInfo.baseActivity;
try {
PackageManager pm = activity.getPackageManager();
ActivityInfo ai = pm.getActivityInfo(rootActivity, PackageManager.GET_META_DATA);
return ai.taskAffinity;
} catch (PackageManager.NameNotFoundException e) {
return null;
}
}
}
return null;
}从活动中使用:
String taskAffinity = ActivityUtils.getTaskAffinity(this);使用自碎片
String taskAffinity = ActivityUtils.getTaskAffinity(requireActivity());https://stackoverflow.com/questions/65001967
复制相似问题