1

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

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

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

在将一个屏幕切换到另一个屏幕时,此 toast 显示不可见,它应该仅在用户再次返回应用程序时第一次可见。

4

3 回答 3

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:如何检查应用程序是否在后台运行

于 2013-10-14T11:47:31.203 回答
0

当按下 Home 按钮时,会在您的活动中调用onStop方法。因此,您可以boolean在 sharedpreferences 中设置一个,也可以手动覆盖onstart检查它,如果布尔值为 true,则在其中放置一个 Toast。

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

    if(keyCode == KeyEvent.KEYCODE_HOME)
    {

       //set flag true in shared preferences

    }
});
于 2013-10-14T09:09:17.893 回答
-1

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

@Override
public void onResume() {

    super.onResume();

}
于 2013-10-14T08:39:27.587 回答