获取APP后台运行状态,杀死指定APP
获取APP后台运行状态,杀死指定APP
dailei1021 发表于2年前
获取APP后台运行状态,杀死指定APP
  • 发表于 2年前
  • 阅读 172
  • 收藏 5
  • 点赞 1
  • 评论 0

腾讯云 技术升级10大核心产品年终让利>>>   

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

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

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

<!--杀死第三方应用的权限-->
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />

<!--获取TASKS权限-->
<uses-permission android:name="android.permission.GET_TASKS" />

有两种方式:

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

/**
 * 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、检测是否正在运行

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

杀死某个应用

/**
 * 强制关闭应用
 *
 * @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是否运行,可参照如下方法:

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


共有 人打赏支持
粉丝 4
博文 63
码字总数 23660
×
dailei1021
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: