【发布时间】:2015-08-16 02:32:24
【问题描述】:
我遇到了一个需求,但我无法获得正确的实施方式,因此需要您的帮助。
我想做什么? - 我想根据收到的通知执行如下操作:
- 当应用程序打开并处于前台即用户可见并且我收到通知时,我只需显示一个弹出窗口来启动我的 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>
【问题讨论】:
-
据我所知,当用户按下 Activity 3 上的
back按钮时,您需要切换到前台的应用程序? -
是的,如果这是一种可能的方式。理想情况下,我需要从后台调用我的应用程序并在其上启动我的 Activity B。
-
显示您的清单文件,我想查看 Activity A 和 B 声明。
-
@MurtazaKhursheedHussain - 请查看我的编辑。我猜那里没什么特别的。
标签: android android-activity activity-lifecycle android-task