#android
#Android
Вопрос:
Мне было интересно, возможно ли получить имя taskAffinity
, которому Activity
принадлежит, во время выполнения?
Я просматриваю, но не могу найти способ сделать это.
Ответ №1:
Сходство действия определяется атрибутом 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;
}
Использование из Activity:
String taskAffinity = ActivityUtils.getTaskAffinity(this);
Использование из фрагмента
String taskAffinity = ActivityUtils.getTaskAffinity(requireActivity());