我有一个前台服务,可以通过点击通知中的“X”来停止。
当前台服务停止时,应显示其他活动。
问题是,当点击“X”-Button时,我不知道应用程序是可见的还是在后台。当应用程序可见时,应更改活动。
答案 0 :(得分:1)
您的问题没有100%保证解决方案。
最简单的一个方法是跟踪全局变量的可见活动:
public void onResume(){
super.onResume();
App.visibleActivity = this;
}
public void onPause(){
super.onPause();
App.visibleActivity = null;
}
但有一些重要的事情:
1)不要忘记在onPause上释放visibleActivity以防止内存泄漏
2)当您的应用在技术上处于后台时,当前onPause与下一个onResume之间存在时间差距
答案 1 :(得分:0)
检查您的活动是否在前台运行?你走了:
public boolean isRunning(Context ctx) {
try {
ActivityManager am = (ActivityManager) context
.getSystemService(Context.ACTIVITY_SERVICE);
// The first in the list of RunningTasks is always the foreground
// task.
RunningTaskInfo foregroundTaskInfo = am.getRunningTasks(1).get(0);
String foregroundTaskPackageName = foregroundTaskInfo.topActivity
.getPackageName();// get the top fore ground activity
PackageManager pm = context.getPackageManager();
PackageInfo foregroundAppPackageInfo = pm.getPackageInfo(
foregroundTaskPackageName, 0);
String foregroundTaskAppName = foregroundAppPackageInfo.applicationInfo
.loadLabel(pm).toString();
// Log.e("", foregroundTaskAppName +"----------"+
// foregroundTaskPackageName);
if (!foregroundTaskAppName.equals("Your App name")) {
return true;
}
} catch (Exception e) {
Log.e("isAppSentToBackground", "" + e);
}
return false;
}
对于API级别> = 21
ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.AppTask> tasks = activityManager.getAppTasks();
for (ActivityManager.AppTask task : tasks) {
Log.d(TAG, "stackId: " + task.getTaskInfo().stackId);
}