Intereting Posts
Преобразование apk в dex Как сделать пару через bluetooth для печати zebra mz320? Медленный список, когда установлен пользовательский шрифт AdView – Отсутствует adActivity с android: configChanges в AndroidManifest.xml Могу ли я использовать CollapsingToolbarLayout в фрагменте из навигационного ящика Кнопка рисования Android на холсте с пользовательским представлением? Правильно ли реализована реализация привязки SSL для Android и почему эта ошибка появляется в логарифме? Скрытие поверхности, которая перекрывает другую Java: Android dev: «Метод getHolder () не определен для типа GameView" Android – Почему autolink игнорирует корневой путь URL? Как я могу показать диалог прогресса между двумя действиями? Инструмент для создания Splash Screen & Wallpaper для всех размеров и устройств с использованием Single Click Как проверить, есть ли у пользователя подписка (Android-приложение для выставления счетов)? Виджет и приложение в одном apk Google Места Api сортируются по расстоянию

Широковещательный приемник для обнаружения запуска приложения

Я хочу фиксировать время, когда пользователь запускает любое приложение с помощью моего широковещательного приемника. Возможно ли, что широковещательный приемник может поймать такое событие? Если да, есть ли какое-либо разрешение, которое может это сделать?

Лучшее, что вы можете сделать, это создать службу STICKY, которая отслеживает все запущенные приложения.

@Override public int onStartCommand(Intent intent, int flags, int startId) { Timer timer = new Timer(); timer.scheduleAtFixedRate(new TimerTask() { public void run() { final ActivityManager activityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); final List<RunningTaskInfo> services = activityManager.getRunningTasks(Integer.MAX_VALUE); for (int i = 0; i < services.size(); i++) { if(!stalkList.contains(services.get(i).baseActivity.getPackageName())) { // you may broad cast a new application launch here. stalkList.add(services.get(i).baseActivity.getPackageName()); } } List<RunningAppProcessInfo> procInfos = activityManager.getRunningAppProcesses(); for(int i = 0; i < procInfos.size(); i++) { ArrayList<String> runningPkgs = new ArrayList<String>(Arrays.asList(procInfos.get(i).pkgList)); Collection diff = subtractSets(runningPkgs, stalkList); if(diff != null) { stalkList.removeAll(diff); } } } }, 20000, 6000); // every 6 seconds return START_STICKY; } private RunningAppProcessInfo getForegroundApp() { RunningAppProcessInfo result = null, info = null; final ActivityManager activityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); List <RunningAppProcessInfo> l = activityManager.getRunningAppProcesses(); Iterator <RunningAppProcessInfo> i = l.iterator(); while(i.hasNext()) { info = i.next(); if(info.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND && !isRunningService(info.processName)) { result = info; break; } } return result; } private boolean isRunningService(String processName) { if(processName == null) return false; RunningServiceInfo service; final ActivityManager activityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); List <RunningServiceInfo> l = activityManager.getRunningServices(9999); Iterator <RunningServiceInfo> i = l.iterator(); while(i.hasNext()){ service = i.next(); if(service.process.equals(processName)) return true; } return false; } private boolean isRunningApp(String processName) { if(processName == null) return false; RunningAppProcessInfo app; final ActivityManager activityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); List <RunningAppProcessInfo> l = activityManager.getRunningAppProcesses(); Iterator <RunningAppProcessInfo> i = l.iterator(); while(i.hasNext()){ app = i.next(); if(app.processName.equals(processName) && app.importance != RunningAppProcessInfo.IMPORTANCE_SERVICE) return true; } return false; } private boolean checkifThisIsActive(RunningAppProcessInfo target){ boolean result = false; ActivityManager.RunningTaskInfo info; if(target == null) return false; final ActivityManager activityManager = (ActivityManager)getSystemService(Context.ACTIVITY_SERVICE); List <ActivityManager.RunningTaskInfo> l = activityManager.getRunningTasks(9999); Iterator <ActivityManager.RunningTaskInfo> i = l.iterator(); while(i.hasNext()){ info=i.next(); if(info.baseActivity.getPackageName().equals(target.processName)) { result = true; break; } } return result; } // what is in b that is not in a ? public static Collection subtractSets(Collection a, Collection b) { Collection result = new ArrayList(b); result.removeAll(a); return result; } 

Вы не можете получать трансляцию, когда кто-то запускает любое другое приложение. Единственное, что вы можете сделать, это запустить службу, которая проверяет и периодически проверяет, были ли запущены новые приложения (например, с использованием кода Reno выше).

Также, если вы начнете эту услугу, когда телефон начнет работать, у вас будет достаточно хорошее решение.