2013-03-18 3 views
2

У меня есть решение.android: как проверить, работает ли приложение в фоновом режиме 2

public static boolean isApplicationSentToBackground(final Context context) { 
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
List<RunningTaskInfo> tasks = am.getRunningTasks(1); 
if (!tasks.isEmpty()) { 
    ComponentName topActivity = tasks.get(0).topActivity; 
    if (!topActivity.getPackageName().equals(context.getPackageName())) { 
    return true; 
    } 
} 

return false; 

}

Он отлично работает.

Как я могу проверить, действительно ли мое приложение действительно в фоновом режиме? Например, я открыл активность и начал новую Activity - стандартную галерею (начал с моего приложения). Это намерение было начато с моей деятельности, а мое приложение логически было на переднем плане. Я могу проверить свои действия, но как проверить эту ситуацию?

И как я могу проверить, что приложение было отправлено на задний экран из внешней активности (в этом примере - галерея)?

+0

Вы проверяете наличие у вас услуги? –

+0

Я думаю, что сервис - это не очень хорошая идея ... Я проверяю его из Activity onPause method – monyag

+0

Зачем вам нужно проверять? Если вы проверяете свою активность, то, очевидно, что все действия на этом этапе остаются на переднем плане для запуска кода. Ваша деятельность может быть в процессе уничтожения, но ваш код паузы приведет вас к тому, что он будет отправлен на задний план. –

ответ

1
public boolean isApplicationSentToBackground(final Context context) { 

    Boolean flag = false; 
    ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); 
    if(Build.VERSION.SDK_INT >= 23) { 
     List<ActivityManager.RunningTaskInfo> tasks = am.getRunningTasks(1); 
     if (!tasks.isEmpty()) { 
      ComponentName topActivity = tasks.get(0).topActivity; 
      if (!topActivity.getPackageName().equals(context.getPackageName())) { 
       flag = true; 
      } 
     } 
    } 
    else { 
     try { 
      Thread.sleep(1500); 
      flag = false; 
      List<ActivityManager.RunningAppProcessInfo> runningProcesses = am.getRunningAppProcesses(); 
      for (ActivityManager.RunningAppProcessInfo processInfo : runningProcesses) { 
       if (processInfo.importance == ActivityManager.RunningAppProcessInfo.IMPORTANCE_BACKGROUND) { 
        for (String activeProcess : processInfo.pkgList) { 
         if (activeProcess.equals(context.getPackageName())) { 
          flag = true; 
         } 
        } 
       } 
      } 
     } 
     catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 
    } 
    return flag; 
} 
+0

, пожалуйста, сделайте форматирование перед отправкой кода –

Смежные вопросы