Intereting Posts
Android Gradle 2.2 не разрешает использование ShrinkResources для подписанного APK В просмотре автозапуска пользовательского интерфейса Ошибка Получение снимка устройства, причина: ошибка Не удалось подключиться к adb. Проверьте, правильно ли установлен adb Сделать обычную тему использовать нулевой фон (предложение Android lint) SetCompoundDrawablesWithIntrinsicBounds работает неправильно Библиотека OCR для распознавания номеров на устройстве счетчика Утечка памяти в Android при попытке отправить форму с изображением на PHP-сервер Как получить только город, штат, страну от лата, долго в андроиде Kotlin – Добавить элементы в ExpandableListView Хотите запустить диктофон по умолчанию из приложения для захвата звука Сбой приложения в эмуляторе при загрузке собственной общей библиотеки, но отлично работает на физическом устройстве BroadcastReceiver с несколькими фильтрами или несколькими BroadcastReceivers? Rapid App Prototyping Tools для Android и iOS Android: PreferenceFragment показывает только первое предпочтение Где можно найти шаблоны Android Studio для скрипта Activity и gradle? RxAndroid и Retrofit: невозможно создать адаптер вызова для io.reactivex.Observable <retrofit2.Response <okhttp3.ResponseBody >>

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