获取APP后台运行状态,杀死指定APP

来源:互联网 发布:网络运营商密码是什么 编辑:程序博客网 时间:2024/05/24 01:42

当我们需要控制某个APP的时候,就需要知道这个APP当前的状态;

首先要开允许检测,关闭进程的权限,在manifests中配置:

?
1
2
3
4
5
<!--杀死第三方应用的权限-->
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
 
<!--获取TASKS权限-->
<uses-permission android:name="android.permission.GET_TASKS" />

有两种方式:

1、遍历栈里面的应用,对比是否有相同的APP应用

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/**
 * APP是否正在运行
 *
 * @param context     应用上下文
 * @param packageName APP的包名
 * @return
 */
public static boolean isAppRunning(Context context, String packageName)
{
    boolean isAppRunning = false;
    ActivityManager activityManager =
            (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<ActivityManager.RunningTaskInfo> list = activityManager.getRunningTasks(100);
 
    for (ActivityManager.RunningTaskInfo info : list)
    {
        if (info.topActivity.getPackageName().equals(packageName) ||
                info.baseActivity.getPackageName().equals(packageName))
        {
            isAppRunning = true;
            SkyLogger.d(TAG,
                    info.topActivity.getPackageName() + " info.baseActivity.getPackageName()=" +
                            info.baseActivity.getPackageName());
            break;
        }
    }
    return isAppRunning;
}

2、检测是否正在运行

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
/**
 * APP是否正在运行
 *
 * @param context     应用上下文
 * @param packageName APP的包名
 * @return
 */
public static boolean isAppOnForeground(Context context, String packageName)
{
    ActivityManager activityManager =
            (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningAppProcessInfo> appProcessInfos = activityManager.getRunningAppProcesses();
 
    if (appProcessInfos == null)
        {
        SkyLogger.d(TAG, "appProcessInfos == null");
        return false;
    }
 
    for (RunningAppProcessInfo appProcess : appProcessInfos)
    {
        if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_FOREGROUND &&
                appProcess.processName.equals(packageName))
        {
            SkyLogger.d(TAG, "正在后台运行");
            return true;
        }
    }
 
    ComponentName cn = activityManager.getRunningTasks(1).get(0).topActivity;
    String currentPackageName = cn.getPackageName();
 
    if (!TextUtils.isEmpty(currentPackageName) && packageName.equals(currentPackageName))
    {
        SkyLogger.d(TAG, "正在前台运行");
        return true;
    }
    SkyLogger.d(TAG, "没有运行");
    return false;
}

杀死某个应用

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
 * 强制关闭应用
 *
 * @param context     应用上下文
 * @param packageName 关闭的APP的包名
 */
public static void closeDeviceApp(Context context, String packageName)
{
    if (packageName != null && context != null)
    {
        ActivityManager activityManager =
                (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        activityManager.killBackgroundProcesses(packageName);
        SkyLogger.d(TAG, packageName + " is killed.");
    }
    else
    {
        SkyLogger.d(TAG, "packageName is null.");
    }
}

如果仅仅只是检测该APP是否运行,可参照如下方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/**
 * APP是否正在运行
 *
 * @param context     应用上下文
 * @param packageName APP的包名
 * @return
 */
public static boolean isAppOnForeground(Context context, String packageName)
{
    ActivityManager activityManager =
            (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    List<RunningAppProcessInfo> appProcessInfos = activityManager.getRunningAppProcesses();
 
    //一般不会跑到这里来,如果跑到这里来的话,要么就是这个app废了,要不就是见鬼了。。
    if (appProcessInfos == null)
    {
        SkyLogger.d(TAG, "appProcessInfos == null");
        return false;
    }
    else
    {
        for (RunningAppProcessInfo appProcess : appProcessInfos)
        {
            if (appProcess.processName.equals(packageName))
            {
                SkyLogger.d(TAG, packageName+"正在后台运行...");
                return true;
            }
        }
        return false;
    }
}
2 0
原创粉丝点击