Я работаю над приложением, которое будет контролировать использование телефона в течение дня. Для этого у меня есть фоновый сервис, который запускается при загрузке устройства и продолжает опрашивать, чтобы выяснить, что является текущим приоритетным приложением. Следующий код работает, когда я просто щелкаю приложение, затем отрываюсь от него и щелкаю другое приложение. Теперь допустим, что я открываю браузер и перехожу на другую веб-страницу, и он перестает регистрировать браузер как приложение переднего плана. Или, например, я открываю Google Talk, он регистрирует его как текущую активность, но когда я отправляю сообщение, он больше не регистрирует его как приложение переднего плана. Любые мысли или идеи относительно того, что может быть причиной этой ошибки? При необходимости я предоставлю любую дополнительную информацию, просто дайте мне знать.
Возможно, ответ кроется в этом посте, и я просто не могу его найти ... Определение текущего приложения переднего плана из фоновой задачи или службы
public static RunningAppProcessInfo getForegroundApp() throws NameNotFoundException{
RunningAppProcessInfo result = null, info = null;
String currApp = null;
am = (ActivityManager)context.getSystemService(ACTIVITY_SERVICE);
Drawable icon = null;
List <RunningAppProcessInfo> l = am.getRunningAppProcesses();
Iterator <RunningAppProcessInfo> i = l.iterator();
PackageManager pm = context.getPackageManager();
while(i.hasNext()){
info = i.next();
if(info.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND && getActivityForApp(info)!=null ){
try {
currApp = getCurrentApplication(info);
System.out.println(currApp);
System.out.println(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));
icon = pm.getApplicationIcon(pm.getApplicationInfo(info.processName, PackageManager.GET_META_DATA));
System.out.println(getActivityForApp(info));
} catch (NameNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
break;
}
return result;
}
private static ComponentName getActivityForApp(RunningAppProcessInfo target){
ComponentName result=null;
ActivityManager.RunningTaskInfo info;
if(target==null)
return null;
if(am==null)
am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
List <ActivityManager.RunningTaskInfo> l = am.getRunningTasks(9999);
Iterator <ActivityManager.RunningTaskInfo> i = l.iterator();
while(i.hasNext()){
info=i.next();
if(info.baseActivity.getPackageName().equals(target.processName)){
result=info.topActivity;
break;
}
}
return result;
}