Intereting Posts
Нет найденных артефактов, соответствующих шаблону файла "** / target / *. Apk" Android, Как я могу проверить, что мое приложение видимо для пользователя (Реализация чата)? Где я могу найти официальный симулятор закладки галактики для Android SDK? Как иметь несколько экранов в html и прокручивать эти экраны Изменение названия на TimePicker? Не удалось найти переменную окружения ANDROID_HOME Работает ли proguard для обфускации статических строковых констант? Ошибка Android Retrofit при построении запроса Java.lang.NullPointerException com.google.android.gms.analytics.w $ b.run Элемент меню Android Checkable Viewpager во фрагменте не отображается (восстанавливается) при возврате из другого фрагмента Полноэкранная кнопка Video внутри WebView не работает Удалите приложение тихо с системными привилегиями Библиотека поддержки: анимация FragmentTransaction не работает Каким должен быть круг цикломатической сложности для JAVA

GetRunningAppProcesses возвращает пустой список на Android M (5.1.1)

Я просто тестировал свое приложение и CM, ATM Android Assistant и т. Д. Все они не могут получить список запущенных процессов, но они отлично работают в версии до ОС. Итак, что происходит с Android M (5.1.1)? пожалуйста помоги!

am = (ActivityManager) getContext().getSystemService(Context.ACTIVITY_SERVICE); List<RunningAppProcessInfo> list = am.getRunningAppProcesses(); Log.i(TAG, "LQ::examine list.size()=" + list.size()); 

Вместо этого я решил использовать getRunningServices!

Du Speed ​​Booster & Power Clean использует getRunningServices, возможно, getRunningAppProcesses устарел в будущем.

Спасибо, Google, спасибо алфавиту.

  Hashtable<String, List<ActivityManager.RunningServiceInfo>> hashtable = new Hashtable<String, List<ActivityManager.RunningServiceInfo>>(); ActivityManager am = (ActivityManager) getContext().getSystemService(Context.ACTIVITY_SERVICE); for (ActivityManager.RunningServiceInfo rsi : am.getRunningServices(Integer.MAX_VALUE)) { if (isCanceled()) { return; } String pkgName = rsi.service.getPackageName(); if (hashtable.get(pkgName) == null) { List<ActivityManager.RunningServiceInfo> list = new ArrayList<ActivityManager.RunningServiceInfo>(); list.add(rsi); hashtable.put(pkgName, list); } else { hashtable.get(pkgName).add(rsi); } } int i = 0; int size = hashtable.size(); for (Iterator it = hashtable.keySet().iterator(); it.hasNext(); i++) { String key = (String) it.next(); List<ActivityManager.RunningServiceInfo> value = hashtable.get(key); ProcessItem item = new ProcessItem(getContext(), value.get(0).pid, key, totalCpu, totalRam); if (!whiteList.contains(item.pkgName)) { if (!killList.contains(item.pkgName)) { killList.add(item.pkgName); ramTotal += item.ram; if (getListener() != null) { Progress progress = new Progress(this); progress.setArg1(i); progress.setArg2(size); progress.setMsg(item.appName); progress.setObj(item); getListener().onExamining(progress); } } } } hashtable.clear(); hashtable = null; 

Другой вариант – использовать UsageStatsManager .

 UsageStatsManager mUsageStatsManager = (UsageStatsManager)getSystemService(Context.USAGE_STATS_SERVICE); long endTime = System.currentTimeMillis(); long beginTime = endTime - 1000*60; // We get usage stats for the last minute List<UsageStats > stats = mUsageStatsManager.queryUsageStats(UsageStatsManager.INTERVAL_DAILY, beginTime, endTime); // Sort the stats by the last time used if(stats != null) { SortedMap<Long,UsageStats> mySortedMap = new TreeMap<Long,UsageStats>(); for (UsageStats usageStats : stats) { mySortedMap.put(usageStats.getLastTimeUsed(),usageStats); } if(mySortedMap != null && !mySortedMap.isEmpty()) { topActivity = mySortedMap.get(mySortedMap.lastKey()).getPackageName(); } } 

Для этого вам нужно разрешение PACKAGE_USAGE_STATS . Вы можете попросить пользователя сделать это, открыв экран в настройках:

 Intent usageAccessIntent = new Intent( Settings.ACTION_USAGE_ACCESS_SETTINGS ); usageAccessIntent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK ); startActivity( usageAccessIntent ); 

Я мог бы получить список приложений переднего плана, используя getRunningServices( ) для android 6.0. Спасибо @ thecr0w

 ActivityManager mActivityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE); List appProcessInfoList = mActivityManager.getRunningServices(Integer.MAX_VALUE);