如何列出 Xamarin.Android 上所有打开的活动?
How can I list all opened activities on Xamarin.Android?
我是移动开发的新手,正在学习 Xamarin。我已经有一些使用 C# 的经验。
我目前正在研究 Xamarin.Android 的分层导航。
在我的项目中,我有主要的 activity、第二个和第三个活动,我可以在它们之间导航。我想知道如何列出所有打开的活动?
例如,如果我在 main activity 中并且我请求打开的活动列表,函数应该 return me 一个仅包含 main activity 名称的列表,但是如果我在第三个 activity,函数应该 return me 一个列表,其中包含主要、第二和第三个活动的名称,大致如下:
主要活动
第二活动
第三活动
我怎样才能得到这些信息?
我正在使用 Xamarin.Android 而不是 Xamarin.Forms。
您可以使用 ActivityManager
获取活动的详细信息。
GetRunningTasks
会 return 当前 运行 的任务列表。但此方法在 API 级别 21 中已弃用。为了向后兼容,它仍将 return 其数据的一小部分:至少是调用者自己的任务,可能还有一些其他任务,例如家庭以不敏感着称。
目前,我们只能使用 BaseActivity 获取第一个 activity 并使用 TopActivity 获取当前。
ActivityManager m = (ActivityManager)this.GetSystemService(ActivityService);
var runningTaskInfoList = m.GetRunningTasks(10);
foreach (var item in runningTaskInfoList)
{
string first = item.BaseActivity.ShortClassName;
string current = item.TopActivity.ShortClassName;
}
感谢您的帮助。
我想差不多就这样了。我对您的代码做了一个小修改,看起来像这样:
public string ListAllActivities()
{
string result = "";
ActivityManager activityManager = (ActivityManager)this.GetSystemService(ActivityService);
var runningTaskInfoList = activityManager.GetRunningTasks(10);
foreach (var item in runningTaskInfoList)
{
string first = item.BaseActivity.ShortClassName.Substring((item.BaseActivity.ShortClassName.LastIndexOf('.') + 1), item.BaseActivity.ShortClassName.Length - (item.BaseActivity.ShortClassName.LastIndexOf('.') + 1));
string current = item.TopActivity.ShortClassName.Substring((item.TopActivity.ShortClassName.LastIndexOf('.') + 1), item.TopActivity.ShortClassName.Length - (item.TopActivity.ShortClassName.LastIndexOf('.') + 1));
result += first + " - " + current + "\n";
}
return result;
}
结果是这样的:Activities Stack
当我在第三个 activity 时,我没有得到第二个 activity 的列表。如果我在第三个 activity 中,可以列出第二个和主要的活动,那么问题就会得到解决。
我是移动开发的新手,正在学习 Xamarin。我已经有一些使用 C# 的经验。 我目前正在研究 Xamarin.Android 的分层导航。 在我的项目中,我有主要的 activity、第二个和第三个活动,我可以在它们之间导航。我想知道如何列出所有打开的活动? 例如,如果我在 main activity 中并且我请求打开的活动列表,函数应该 return me 一个仅包含 main activity 名称的列表,但是如果我在第三个 activity,函数应该 return me 一个列表,其中包含主要、第二和第三个活动的名称,大致如下:
主要活动 第二活动 第三活动
我怎样才能得到这些信息?
我正在使用 Xamarin.Android 而不是 Xamarin.Forms。
您可以使用 ActivityManager
获取活动的详细信息。
GetRunningTasks
会 return 当前 运行 的任务列表。但此方法在 API 级别 21 中已弃用。为了向后兼容,它仍将 return 其数据的一小部分:至少是调用者自己的任务,可能还有一些其他任务,例如家庭以不敏感着称。
目前,我们只能使用 BaseActivity 获取第一个 activity 并使用 TopActivity 获取当前。
ActivityManager m = (ActivityManager)this.GetSystemService(ActivityService);
var runningTaskInfoList = m.GetRunningTasks(10);
foreach (var item in runningTaskInfoList)
{
string first = item.BaseActivity.ShortClassName;
string current = item.TopActivity.ShortClassName;
}
感谢您的帮助。 我想差不多就这样了。我对您的代码做了一个小修改,看起来像这样:
public string ListAllActivities()
{
string result = "";
ActivityManager activityManager = (ActivityManager)this.GetSystemService(ActivityService);
var runningTaskInfoList = activityManager.GetRunningTasks(10);
foreach (var item in runningTaskInfoList)
{
string first = item.BaseActivity.ShortClassName.Substring((item.BaseActivity.ShortClassName.LastIndexOf('.') + 1), item.BaseActivity.ShortClassName.Length - (item.BaseActivity.ShortClassName.LastIndexOf('.') + 1));
string current = item.TopActivity.ShortClassName.Substring((item.TopActivity.ShortClassName.LastIndexOf('.') + 1), item.TopActivity.ShortClassName.Length - (item.TopActivity.ShortClassName.LastIndexOf('.') + 1));
result += first + " - " + current + "\n";
}
return result;
}
结果是这样的:Activities Stack
当我在第三个 activity 时,我没有得到第二个 activity 的列表。如果我在第三个 activity 中,可以列出第二个和主要的活动,那么问题就会得到解决。