我做了很多搜索,但没有找到任何合适的答案。问题是这样的:
假设我启动了具有活动 A、B、C 的 android 项目,并且我需要在按下 Home 按钮后整个应用程序进入后台时捕获事件(无论活动如何)。
当用户再次启动应用程序时,它会从 android 维护的 Activity 堆栈中恢复。我想捕获此事件并向用户“您的应用程序现在处于活动状态”显示敬酒。
在将一个屏幕切换到另一个屏幕时,此 toast 显示不可见,它应该仅在用户再次返回应用程序时第一次可见。
我做了很多搜索,但没有找到任何合适的答案。问题是这样的:
假设我启动了具有活动 A、B、C 的 android 项目,并且我需要在按下 Home 按钮后整个应用程序进入后台时捕获事件(无论活动如何)。
当用户再次启动应用程序时,它会从 android 维护的 Activity 堆栈中恢复。我想捕获此事件并向用户“您的应用程序现在处于活动状态”显示敬酒。
在将一个屏幕切换到另一个屏幕时,此 toast 显示不可见,它应该仅在用户再次返回应用程序时第一次可见。
经过几天的努力,我发现了一些东西。希望它在某些情况下有用。
/**
* 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:如何检查应用程序是否在后台运行
当按下 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
}
});
当应用再次处于活动状态时调用此方法。把你的吐司写在那里。
@Override
public void onResume() {
super.onResume();
}