代码之家  ›  专栏  ›  技术社区  ›  Supun Liyanaarachchi

检查android前台运行的特定包名

  •  -1
  • Supun Liyanaarachchi  · 技术社区  · 6 年前

    我在做售货亭 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)

    我也遵循了这个例子 find application running in foreground from service

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

    1 回复  |  直到 6 年前
        1
  •  0
  •   Supun Liyanaarachchi    6 年前

    终于找到了答案

    Android 5.1.1 and above - getRunningAppProcesses() returns my application package only

    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();
            }
        }