проверить конкретное имя пакета, работающее в Android переднего плана - PullRequest
0 голосов
/ 04 июня 2018

Я работаю над приложением киоска 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).

Я также последовал этому примеру найти приложение, работающее на переднем плане из службы

Я очень рад, если кто-нибудь может дать мне хотя бы причину.

1 Ответ

0 голосов
/ 11 июня 2018

Наконец нашел ответ

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();
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...