获取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
- 获取APP后台运行状态,杀死指定APP
- 在app进程杀死状态下获取推送消息
- Android判断App前台运行还是后台运行(运行状态)
- 获取app和Activity运行状态
- Shell 杀死指定后台运行进程
- IOS App 后台运行
- app后台运行
- IOS App 后台运行
- iOS App 后台运行
- app后台运行
- app退出后台运行
- ios-app杀死状态下响应推送
- iOS App进入后台获取更多的运行时间
- iOS App进入后台获取更多的运行时间
- iOS App进入后台获取更多的运行时间
- iOS App进入后台获取更多的运行时间
- iOS App进入后台获取更多的运行时间
- iOS App进入后台获取更多的运行时间
- AFNetworking 3.0笔记
- Java复习(2)-面向对象
- 数据科学实战笔记1
- R语言处理类别不平衡问题
- AMBA总线概述(二)
- 获取APP后台运行状态,杀死指定APP
- git常用命令
- 注入exploit
- 对表数据进行(置顶,上移,下移,置底操作)---数据库sql
- Lua -- pairs和ipairs区别
- [补充]LCT有关细节的处理及理解
- MC9S12G时钟配置
- Ubuntu.Components 1.3上的PageHeader教程
- Port busy 8009 java.net.BindException: Address already in use: JVM_Bind 解决办法