【如何管理开机自启动程序】
先写一个程序看看手机里面安装的app那些具有开机自启权限
有很多方法:这里是通过packagemnager 实现
public class checkthestartslef extends Activity {
ListView listView;
String boot_permission = "android.permission.RECEIVE_BOOT_COMPLETED";
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.listview_main);
listView = (ListView) findViewById(R.id.list);
// 添加适配器Adapter
listView.setAdapter(new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, getAppInfo()));
}
// 拿到开机启动app的信息
private String[] getAppInfo() {
int count = 0;// 记录有多少个app
// 拿到已安装程序的信息
List<ApplicationInfo> allAppList = getPackageManager()
.getInstalledApplications(0);
// 新建一个ArrayList数组
List<String> autoBootAppList = new ArrayList<String>();
// 遍历已安装的app如果app的权限里含有boot_permission且不为系统app
for (ApplicationInfo appinfo : allAppList) {
if (PackageManager.PERMISSION_GRANTED == getPackageManager()
.checkPermission(boot_permission, appinfo.packageName)) {
if ((appinfo.flags & ApplicationInfo.FLAG_SYSTEM) <= 0) {
autoBootAppList.add(appinfo.packageName);
}
} else {
autoBootAppList.add("第" + count + "个app");
count++;
}
}
return autoBootAppList.toArray(new String[autoBootAppList.size()]);
}
}
开机启动广播
- 1.extends broadcast
- 2.注册/动静
- 3.声明权限
- 4.有序广播但是 不可中断
停止广播的方法
1.设置app的Package stopped标志来实现
通过forcestoppackage禁用,会停止定时器等。同时也需要system权限和系统签名
2.设置recevier组件为不可用android:enable
setApplicationEnabledSetting停用应用中所有的组件
SetComponentEnabledSetting指定组件
- 3.kill app进程
总结:
root权限:
1.使用pm命令来禁用包含Boot_Completed
2.监控后来进程“轮训”黑名单进而kill
增大了系统消耗。
小米:解析权限的时候回将所有的接受器的优先级减1。
如果没有root权限第三方app很难拿到对系统权限的控制。反而会降低安全性和消耗资源