/**
* 根据包名关闭一个后台应用,正处于前台的应用关不了,带通知栏的服务也属于前台进程,关闭不了
* 需要权限KILL_BACKGROUND_PROCESSES
* @param context
* @param packageName
*/
public static void killApps(Context context,String packageName) {
try {
ActivityManager manager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
manager.killBackgroundProcesses(packageName);
System.out.println("TimerV kill background: "+packageName+" successful");
}catch(Exception ex) {
ex.printStackTrace();
System.err.println("TimerV kill background: "+packageName+" error!");
}
}
/**
* 根据包名关闭应用,已被弃用,听说源码中依然调用killBackgroundProcesses
* 需要权限 RESTART_PACKAGES
* @param context
* @param packageName
*/
public static void restartApps(Context context,String packageName) {
try {
ActivityManager manager = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
manager.restartPackage(packageName);
System.out.println("TimerV restart package "+packageName+" successful");
}catch(Exception ex) {
ex.printStackTrace();
System.err.println("TimerV restart package "+packageName+" error!");
}
}
/**
* 根据包名启动应用
* @param context
* @param packageName
*/
public static void startApps(Context context,String packageName) {
try {
PackageManager packageManager = context.getPackageManager();
Intent intent=new Intent();
intent =packageManager.getLaunchIntentForPackage(packageName);
if(intent==null){
System.err.println("TimerV package: "+packageName+" uninstalled!");
}else{
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
}catch(Exception ex) {
ex.printStackTrace();
System.err.println("TimerV start package: "+packageName+" error!");
}
}
/**
* 根据包名和服务名启动一个服务
* @param context
* @param packageName
* @param service
*/
public static void startService(Context context,String packageName,String service) {
try {
Intent intent=new Intent();
ComponentName cn = new ComponentName(packageName,service);
intent.setComponent(cn);
context.startService(intent);
}catch(Exception ex) {
ex.printStackTrace();
System.err.println("TimerV start service: "+service+" error!");
}
}
/**
* 根据包名强制关闭一个应用,不管前台应用还是后台进程,需要share systemuid
* 需要权限 FORCE_STOP_PACKAGES
* @param context
* @param packageName
*/
public static void stopApps(Context context,String packageName) {
try {
ActivityManager am = (ActivityManager)context.getSystemService(Context.ACTIVITY_SERVICE);
Method forceStopPackage = am.getClass().getDeclaredMethod("forceStopPackage", String.class);
forceStopPackage.setAccessible(true);
forceStopPackage.invoke(am, packageName);
System.out.println("TimerV force stop package "+packageName+" successful");
}catch(Exception ex) {
ex.printStackTrace();
System.err.println("TimerV force stop package "+packageName+" error!");
}
}
示例代码请参考
https://download.csdn.net/download/peachs885090/10743169
https://pan.baidu.com/s/14IdYIs5APGFAXlklwVJgng 提取码:vfht