我遇到了一个要求,但我无法获得正确的实施方式,因此需要您的帮助。
我想做的事?- 我想根据收到的通知执行一项操作,如下所示:
- 当应用程序打开并在前台即用户可见并且我收到通知时,我只需显示一个弹出窗口来启动我的 Activity B
- 当应用程序关闭时,即既不在后台也不在前台,我收到通知我将首先启动我的应用程序,然后启动 Activity B
- 当应用程序在后台运行但在最近运行但对用户不可见时,我想在不重新启动应用程序的情况下启动我的 Activity B。此外,在这种情况下,当用户按下 Activity B 时,他们应该在将其发送到后台之前看到他们离开的屏幕。
我做了什么?我已经达到了第 1 点和第 2 点。我想达到第 3 点。我已经尝试过以下
public static boolean isApplicationBroughtToBackground(final Activity activity) {
ActivityManager activityManager = (ActivityManager) activity.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> tasks = activityManager.getRunningTasks(1);
// Check the top Activity against the list of Activities contained in the Application's package.
if (!tasks.isEmpty()) {
ComponentName topActivity = tasks.get(0).topActivity;
try {
PackageInfo pi = activity.getPackageManager().getPackageInfo(activity.getPackageName(), PackageManager.GET_ACTIVITIES);
for (ActivityInfo activityInfo : pi.activities) {
if(topActivity.getClassName().equals(activityInfo.name)) {
return false;
}
}
} catch( PackageManager.NameNotFoundException e) {
return false; // Never happens.
}
}
return true;
}
然而,这在这两种情况下都返回 true,点 #2 和 #3,所以我无法仅区分 #3。
此外,我在每个活动中都尝试了以下内容,
@Override
protected void onPause() {
super.onPause();
saveIsPausedInPref(true);
}
@Override
protected void onResume() {
super.onResume();
saveIsPausedInPref(false);
}
但是,如果通过按主页按钮将应用程序发送到后台,它也不会给出所需的结果,我的首选项将isPaused = true并且如果用户从最近删除应用程序,那么它将保持真实,我不会再能够在通知到达时区分第 2 点和第 3 点。
为整个故事道歉,但我希望我能够解释我的要求。
提前致谢。:)
编辑:
<activity
android:name=".HomeActivity"
android:screenOrientation="portrait" >
</activity>
<activity
android:name=".ChatProfileActivity"
android:screenOrientation="portrait" >
</activity>