检查Android应用是否在后台?

时间:2013-10-14 08:32:37

标签: android events background

我做了很多搜索,但没有找到任何合适的答案。问题是这样的:

假设我启动了具有活动A,B,C的android项目,并且我需要在主页按钮按下后整个应用程序进入后台时捕获事件(无论活动如何)。

当用户再次启动app时,它会从android维护的Activity堆栈中恢复。此活动我想捕捉并向用户显示“您的应用现在处于活动状态”。

当将一个屏幕切换到另一个屏幕时,这个toast show不可见,只有当用户再次回到应用程序时,它才应该是第一次可见。

3 个答案:

答案 0 :(得分:1)

经过几天的努力,我找到了一些东西。希望它在某些情况下有用。

/**
* Checks if the application is being sent in the background (i.e behind
* another application's Activity).
* 
* @param context the context
* @return <code>true</code> if another application will be above this one.
*/
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;
}

为此,您应将其包含在AndroidManifest.xml中

 <uses-permission android:name="android.permission.GET_TASKS" />

了解更多细节。参考:android:how to check if application is running in background

答案 1 :(得分:0)

当按下主页按钮时,您的活动会调用 onStop 方法。因此,您可以在共享偏好中设置一个boolean并覆盖启动时检查如果布尔值为真,则手动并在Toast中放置Toast。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {     

    if(keyCode == KeyEvent.KEYCODE_HOME)
    {

       //set flag true in shared preferences

    }
});

答案 2 :(得分:-1)

当app再次处于活动状态时,将调用此方法。在那里写你的吐司。

@Override
public void onResume() {

    super.onResume();

}