最近项目中,有用到开机自启动的功能,这里做一下总结,供大家学习探讨!

Android 开机启动延迟问题
Android 开机自启动被拦截问题

实战演练

测试手机:红米手机 Redmi 6A 安卓version 9
                  华为手机 DUA-AL00 安卓version 8.1.0
                  华为手机 Honor 9i 安卓version 9.1.0
                  VIVO手机 vivo iQOO 安卓version 11
                  小米平板 MI PAD 4 安卓version 8.1.0

经测试以上机型测试成功

对于开机自启的基本思路:

  1. 想要实现app开机自启动,我们用广播的方式来实现这种需求。app首先需要去注册一个关于接收发送开机启动的广播(android.intent.action.BOOT_COMPLETED);而且必须要注意的一点是:这个广播必须的静态注册的,不能是动态注册的广播(这种接收开机广播的,一定要静态注册,这样应用还没运行起来时也照样能够接收到开机广播
    ,动态广播就不行了)。
  2. 静态注册好了广播之后,在onReceive方法里面做处理就可以了
  3. 重点注意项
    (1)在安装完应用后,要先运行一次,然后关机,再启动。
    (2)针对Andorid4.0之后需先启动一次APP才可收到开机完成的广播,主要目的是防止恶意程序
    (3)同设备尽可能只允许一个APP实现开机自启动的功能,否则俩者应该会有冲突

具体实现

//加入权限
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

这里关于onReceive方法里面的处理,有些机型不起作用,这里总结了两种实现方式:
1.根据包名启动应用
2.指定class类,跳转到相应的Activity

/*** @author Martin-harry* @date 2022/3/4* @address* @Desc 定义自启动BroadcastReceiver*/
public class AutoStartBroadReceiver extends BroadcastReceiver {private static final String ACTION = "android.intent.action.BOOT_COMPLETED";@Overridepublic void onReceive(Context context, Intent intent) {Log.e("接收广播", "onReceive: ");Log.e("接收广播", "onReceive: " + intent.getAction());//开机启动if (ACTION.equals(intent.getAction())) {Log.e("接收广播", "onReceive: 启动了。。。");//第一种方式:根据包名
//            PackageManager packageManager = context.getPackageManager();
//            Intent mainIntent = packageManager.getLaunchIntentForPackage("com.harry.martin");
//            mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//            context.startActivity(mainIntent);
//            context.startService(mainIntent);//第二种方式:指定class类,跳转到相应的AcitivityIntent mainIntent = new Intent(context, LoginActivity.class);/*** Intent.FLAG_ACTIVITY_NEW_TASK* Intent.FLAG_ACTIVITY_CLEAR_TOP*/mainIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);context.startActivity(mainIntent);
//            context.startService(mainIntent);}}}

注册广播

       <receiverandroid:name=".receiver.AutoStartBroadReceiver"android:exported="true"><intent-filter><action android:name="android.intent.action.BOOT_COMPLETED" /><category android:name="android.intent.category.HOME" /></intent-filter></receiver><activityandroid:name=".mvp.view.Activity.LoginActivity"android:enabled="true"android:exported="true"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity>

场景测试

做完上面的工作后,这里就针对部分手机应用的权限管理操作了

   ComponentName localComponentName = new ComponentName(MyApp.getInstance(), MyInstalledReceiver.class);int i = MyApp.getInstance().getPackageManager().getComponentEnabledSetting(localComponentName);
//        Log.e("自启动 >>>>", "onCreate: " + i);getAutostartSettingIntent(this);
/*** 获取自启动管理页面的Intent** @param context context* @return 返回自启动管理页面的Intent*/public static Intent getAutostartSettingIntent(Context context) {ComponentName componentName = null;String brand = Build.MANUFACTURER;Intent intent = new Intent();intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);switch (brand.toLowerCase()) {case "samsung"://三星componentName = new ComponentName("com.samsung.android.sm", "com.samsung.android.sm.app.dashboard.SmartManagerDashBoardActivity");break;case "huawei"://华为Log.e("自启动管理 >>>>", "getAutostartSettingIntent: 华为");componentName = new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.appcontrol.activity.StartupAppControlActivity");
//            componentName = new ComponentName("com.huawei.systemmanager", "com.huawei.systemmanager.startupmgr.ui.StartupNormalAppListActivity");//目前看是通用的break;case "xiaomi"://小米
//                componentName = new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity");componentName = new ComponentName("com.android.settings","com.android.settings.BackgroundApplicationsManager");break;case "vivo"://VIVO
//            componentName = new ComponentName("com.iqoo.secure", "com.iqoo.secure.safaguard.PurviewTabActivity");componentName = new ComponentName("com.iqoo.secure", "com.iqoo.secure.ui.phoneoptimize.AddWhiteListActivity");break;case "oppo"://OPPO
//            componentName = new ComponentName("com.oppo.safe", "com.oppo.safe.permission.startup.StartupAppListActivity");componentName = new ComponentName("com.coloros.oppoguardelf", "com.coloros.powermanager.fuelgaue.PowerUsageModelActivity");break;case "yulong":case "360"://360componentName = new ComponentName("com.yulong.android.coolsafe", "com.yulong.android.coolsafe.ui.activity.autorun.AutoRunListActivity");break;case "meizu"://魅族componentName = new ComponentName("com.meizu.safe", "com.meizu.safe.permission.SmartBGActivity");break;case "oneplus"://一加componentName = new ComponentName("com.oneplus.security", "com.oneplus.security.chainlaunch.view.ChainLaunchAppListActivity");break;case "letv"://乐视intent.setAction("com.letv.android.permissionautoboot");default://其他intent.setAction("android.settings.APPLICATION_DETAILS_SETTINGS");intent.setData(Uri.fromParts("package", context.getPackageName(), null));break;}intent.setComponent(componentName);return intent;}

关于红米手机授权操作:

找到红米手机里面的手机管家应用,并打开里面的应用管理

打开授权管理,给自己的应用设置自启动权限,并允许应用在后台弹出界面

关于华为手机授权操作:

总结

本人在测试的时候,红米手机开机自启时间需要等待一段时间,如果有大佬知道怎么解决的,可以下方评论一下,谢谢啦

项目下载地址:AutoBroadCastReceiver_HandlerOOM

题外话:

另外一种实现方式的话,最好就是让系统桌面应用启动你,Launcher
PackageName:comp.xxx.launcher
launcher就是java写的一个app,只不过它是系统应用,但是拿这个代码的话,好像得fw的人帮忙,或者你自己搞出来
具体的也是在Launcher这个的MainActivity里面加个intent 跳转你app的包名

Android App开机自启动相关推荐

  1. Android APP开机自启动基本方法

    前言 应用自启动主要是通过接收系统广播BOOT_COMPLETED来实现的,在receiver中执行APP启动的方法. 实现 主要分为两个部分: AndroidManifest.xml配置,包括权限配 ...

  2. Android 8.1 App开机自启动、注册为无障碍服务、实现悬浮窗

    (欢迎转载,只需注明本文来源:https://blog.csdn.net/actionwind/article/details/103619688) 以下各方法大多来自于网上诸多朋友的无私分享,但找到 ...

  3. Android程序App开机自启动

    需求:Android设备开机后,自动运行程序 1.首先,我们先自定义一个广播类来实现界面的跳转,跳转到你的MainActivity界面 public class BootBroadcastReceiv ...

  4. 安卓app开机自启动代码

    最近要做个大屏的开发板程序,需要长期稳定运行,并开机自启运行此软件. 废话不多说,上代码 开机自启需要广播检测,权限 android.permission.RECEIVE_BOOT_COMPLETED ...

  5. android 6.0关闭开机启动器,Android实现开机自启动及开机自启动失败原因

    1.开机自启动实现代码 BroadcastReceiver开机自启动实现,MainActivity.class为自启动显示的页面. public class BootBroadcastReceiver ...

  6. 安卓系统开机指定APP应用启动,安卓机顶盒指定APP启动,安卓系统设置开机启动APP,安卓app开机自启动

    目前市面上好多机顶盒比如创维,爱奇艺,先科机顶盒,夏新机顶盒,英菲克机顶盒等等, 都设置了开机不启动第三方应用, 开机自启动设置方法: 1.  监控RECEIVE_BOOT_COMPLETED,即开机 ...

  7. 如何使APP开机自启动

    方案一 将app做成系统应用,直接安装在 system/app 目录下 具体步骤为: 1.在AndroidManifest文件中,添加 android:sharedUserId="andro ...

  8. Android 实现开机自启动 Service

    首先做一个监听器: public class StartBroadcastReceiver extends BroadcastReceiver{ private static final String ...

  9. android studio开发 APP开机自启动

    最近在做个APP,需要开启自启功能,通过在网上查找资料,实现了自启功能,非常简单,步骤如下: 1.创建广播接收器broadcastReceiver ![在这里插入图片描述](https://img-b ...

  10. Android APP开机启动,安卓APP开发自启动,安卓启动后APP自动启动 Android让程序开机自动运行APP

    让APP在安卓系统启动自动运行可以带来以下几个好处: 用户方便:当用户打开设备时,自动启动所需的APP可以让用户更方便地使用设备,不必手动打开APP. 提高用户黏性:自动启动APP可以让用户更快地开始 ...

最新文章

  1. 函数指针amp;绑定: boost::functoin/std::function/bind
  2. Sublime Text 3 import Anaconda 无法正常补全模块名解决办法
  3. mysql gtid 主主_mysql GTID主从复制(主库在线,添加新丛库)
  4. OpenShift 4 - 安全上下文 SecurityContext
  5. html树形结构_数据结构-线性表.md
  6. 接口配置锦囊妙计之三----端口自协商
  7. DSP2812和28335的区别
  8. 【机器学习15】决策树模型详解
  9. java操作mysql临时表_MySQL 临时表
  10. 计算机国际期刊等级,计算机期刊等级(全)
  11. 2018你那计算机考试新题型,2018年421多省公务员考试判断推理新题型、新趋势
  12. 液晶显示屏简介以及与CRT显示屏的对比
  13. 【总结】1050- Code Review流程规范
  14. ram android手机 占用,一问易答:为何安卓机RAM使用率总是很高
  15. JSP SSH校园兼职信息发布平台myeclipse开发mysql数据库MVC模式java编程计算机网页设计
  16. android的ui模板,11免费好看的手机APP UI模板
  17. Visual Studio2022编译报错解决方法
  18. springboot——项目install报错
  19. Java课程设计-画图工具
  20. c语言裸函数,【逆向知识】裸函数(Naked函数)

热门文章

  1. 木讷的程序员需要知道的事情 (四)
  2. hualinux 编程概念 3.15:天下武功,唯快不破—新时代敏捷项目管理之道
  3. 从共享征信黑名单开始:LinkEye想打造基于区块链的征信联盟
  4. 黑苹果oc清除nvram_自己组装一台“iMac”是什么体验(下):AMD 平台也能吃上黑苹果...
  5. 重装系统后计算机无法联网,韩博士重装系统后电脑无法上网怎么办?
  6. string类----猜词游戏
  7. Java——正三角、倒三角、菱形打印
  8. Obtaining Reliable Human Ratings of Valence, Arousal, and Dominance for 20,000 English Words
  9. go-ipfs命令详解之files
  10. 在html中加入网址,网页超链接怎么做,添加超链接网址的的详细步骤