当我们需要控制某个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
;
}
}
|