Android设置App是否开机自启动
发布日期:2021-07-30 03:26:05
浏览次数:5
分类:技术文章
本文共 2638 字,大约阅读时间需要 8 分钟。
说明: 我们的app有时候有设置开机是否自启动的需求。开机自启动其实很简单。
要设置自启动,首先,我们要让app能够自己启动:
第一步实现自启动
1、权限不能没有:
2、我们需要一个广播:这里的MainActivity.class是你想要启动的Activity
public class BootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) { Intent intent2 = new Intent(context, MainActivity.class); intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent2); } } }
3、还要注册这个广播,这里要说的是,开机完成的广播是系统广播,不允许在代码里面注册:
到这里,自启动就能实现了。
第二步控制是否自启动:
之前一直觉得,用SharedPreferences存一个标志就能实现,比如
public class BootReceiver extends BroadcastReceiver { public final static String AUTO_START = "AUTO_START"; @Override public void onReceive(Context context, Intent intent) { if(intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) { SharedPreferences settings = context.getSharedPreferences(AUTO_START,Context.MODE_PRIVATE); if(settings.getBoolean("AUTO_START", false)){ Intent intent2 = new Intent(context, MainActivity.class); intent2.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent2); } } } }
然而发现,并没有什么用,这里都取不到这个SharedPreferences存的值,我也不知为毛,那就只能找其他方法了;
在互联网的世界游荡,终于看到了这个标题。“Android禁用和开启四大组件的方法”原文:,当时就懵逼了,四大组件还能禁用?看了这篇文章还真找到了完成我们需求的方法:
当我们设置开机禁止自启动的时候:只要把我们的BootReceiver干掉就行了; 具体如下:private void setComponentEnabled(Class clazz, boolean enabled) { final ComponentName c = new ComponentName(this, clazz.getName()); getPackageManager().setComponentEnabledSetting(c, enabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED : PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP); }
先说下这两个参数。第一个:BootReceiver.class,第二个:就是你的开机是否自启动boolean值了;
再说一下这个方法:
setComponentEnabledSetting (ComponentName componentName, int newState, int flags) componentName:组件名称 newState:组件新的状态,可以设置三个值,分别是如下: 不可用状态:COMPONENT_ENABLED_STATE_DISABLED 可用状态:COMPONENT_ENABLED_STATE_ENABLED 默认状态:COMPONENT_ENABLED_STATE_DEFAULT flags:行为标签,值可以是DONT_KILL_APP或者0。 0说明杀死包含该组件的app。到这里app设置开机是否自启动就完工了;
不过我还是想啰嗦一句:希望大家还是看一看 大家都知道,现在的手机,有自带内存的,还有可以插SD卡的,在Android API Level大于8的时候,程序是可以安装在SD卡上的。那么问题又来了,很不幸的,你的app被用户安装在SD卡,可是SD卡挂载是在BOOT_COMPLETED这广播发送之后才开始的,So,你的app一样不能启动。但是别担心啊:Android框架说:Don’t call me, I’ll call you back。SD挂载完成了,一样是有广播的。去监听这个广播就行了。转载地址:https://blog.csdn.net/u010886975/article/details/52911875 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
表示我来过!
[***.240.166.169]2024年03月20日 14时31分32秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Echarts疫情地图+Mybatisplus动态数据源
2019-04-25
【呼叫中心KPI解析】10、人工接通量
2019-04-25
android开发那些事儿(四)--调用系统相机像素过低
2019-04-25
高性能Mysql 学习笔记
2019-04-25
大数据面试
2019-04-25
Vue.js 2.0 计算属性
2019-04-25
set 元素如何顺序输出的问题
2019-04-25
Redis基础和应用
2019-04-25
开学回归力扣:第七题——264. 丑数 II(巧妙的动态规划思想)
2019-04-25
蓝桥杯----旋转
2019-04-25
蓝桥杯:最大降雨量
2019-04-25
蓝桥杯:质数
2019-04-25
蓝桥杯:等差数列
2019-04-25
蓝桥杯:后缀表达式
2019-04-25
STM32为什么必须 先配置时钟 再配置GPIO
2019-04-25
蓝桥杯 算法提高 9-3摩尔斯电码 ADV-226
2019-04-25
蓝桥杯 算法提高 7-1用宏求球的体积 ADV-221
2019-04-25
在Java中,二维数组中计算行数和列数
2019-04-25
CCF CSP 201709-1 打酱油
2019-04-25