gpt4 book ai didi

android - 如何检查服务是否在后台/前台运行 Activity ?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:27:47 25 4
gpt4 key购买 nike

我创建了一个服务,该服务从 Activity 的 onCreate 开始并在 Activity 的 onDestroy 方法处停止。现在我必须从服务的方法中检查 Activity 是否在前台/后台运行(对于某些情况,例如应用程序被强制关闭)。我该怎么做?

  1. 我需要这样做,因为据我所知,如果任何应用程序被强行关闭或发生任何类型的崩溃,无法保证调用 Activity 的 onDestroy 方法。因此,在我的 Activity 启动时启动的服务不会在任何崩溃或任何强制关闭事件后停止。

  2. 我看到了this link可以检查前台 Activity 的地方。但是我需要在任何状态(前景或背景)下检查正在运行的 Activity

最佳答案

最终更新

检查所有 Activity :

@Override
protected void onStop() {
super.onStop();

if (AppConstants.isAppSentToBackground(getApplicationContext())) {
// Do what ever you want after app close simply Close session

}
}

检查我们的应用程序是否正在运行的方法:

public static boolean isAppSentToBackground(final Context context) {

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;
}

答案再次更新

将以下方法与您的包名称一起使用。如果您的任何 Activity 在前台,它将返回 true。

public boolean isForeground(String myPackage){
ActivityManager am = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
List< ActivityManager.RunningTaskInfo > runningTaskInfo = am.getRunningTasks(1);

ComponentName componentInfo = runningTaskInfo.get(0).topActivity;
if(componentInfo.getPackageName().equals(myPackage)) return true;
return false;
}

答案已更新

先检查这个链接Checking if an Android application is running in the background

http://developer.android.com/guide/topics/fundamentals.html#lcycles是对 Android 应用程序生命周期的描述。

当 Activity 进入后台时,将调用 onPause() 方法。因此,您可以在此方法中停用更新通知。

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;
}

在 list 中添加权限

<uses-permission android:name="android.permission.GET_TASKS" />

关于android - 如何检查服务是否在后台/前台运行 Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21850485/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com