检查在 Android 前台运行的特定软件包名称



我正在开发信息亭xamarin.android应用程序。 我需要知道我当前的前台应用程序(PackageName)是什么。

尝试了几个样品,但没有用。

--样本 1

ActivityManager activityManager = (ActivityManager)BaseContext.GetSystemService(ActivityService);
List<ActivityManager.RunningAppProcessInfo> runningProcesses = activityManager.RunningAppProcesses.ToList();
foreach (ActivityManager.RunningAppProcessInfo processInfo in runningProcesses)
{
if (processInfo.Importance == Android.App.Importance.Foreground)
{
foreach (String activeProcess in processInfo.PkgList)
{
if (activeProcess.Equals(_context.PackageName))
{
return true;
}
}
}
}

--样本2--

ActivityManager activityManager = (ActivityManager)GetSystemService(Context.ActivityService);
var packageName = activityManager.RunningAppProcesses;

--样本3--

var am = _context.GetSystemService(ActivityService).JavaCast<ActivityManager>();
IList<ActivityManager.RunningTaskInfo> taskInfo = am.GetRunningTasks(5);
var componentInfo = taskInfo[0].TopActivity;

我在OnPause()中调用这些代码,但所有这些代码都只返回我的任务(my package name)

我也遵循了这个例子 从服务中查找在前台运行的应用程序

如果有人能至少给我一个理由,我很高兴。

终于找到了答案

Android 5.1.1 及更高版本 - getRunningAppProcesses(( 仅返回我的应用程序包

UsageStatsManager usm = (UsageStatsManager)this.getSystemService("usagestats");
long time = System.currentTimeMillis();
List<UsageStats> appList = usm.queryUsageStats(UsageStatsManager.INTERVAL_DAILY,  time - 1000*1000, time);
if (appList != null && appList.size() > 0) {
SortedMap<Long, UsageStats> mySortedMap = new TreeMap<Long, UsageStats>();
for (UsageStats usageStats : appList) {
mySortedMap.put(usageStats.getLastTimeUsed(), usageStats);
}
if (mySortedMap != null && !mySortedMap.isEmpty()) {
currentApp = mySortedMap.get(mySortedMap.lastKey()).getPackageName();
}
}

相关内容

最新更新