Android开机自启动的两种方式

您所在的位置:网站首页 安卓系统怎么设置软件开机启动权限 Android开机自启动的两种方式

Android开机自启动的两种方式

2023-12-13 00:20| 来源: 网络整理| 查看: 265

最近在做一个项目,实现一个设备管控软件app。需要手机开机自启动app拉出隐私页面給用户签署,从而开始管控该设备。

当然,我这个是一个特殊的app。强烈依赖于底层软件环境的支持。不具备市场app的一致性,特此申明,仅供参考。

一.说到开机启动,首先能想到的是通过监听系统的开机广播来实现,拉起app。

首先,需要在清单文件AndroidManifest.xml申请监听开机广播权限 android.intent.action.BOOT_COMPLETED。

然后在清单文件AndroidManifest.xml声明该广播接收者,也就是下面实现监听广播处理自己的业务逻辑(拉起自己app)的类BootReceiver。

最后实现一个BroadcastReceiver,该广播接收者监听"android.intent.action.BOOT_COMPLETED"广播,当接收到该广播时,打开该应用的启动页面。

public class BootReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED")) { Intent toIntent = context.getPackageManager().getLaunchIntentForPackage(context.getPackageName()); context.startActivity(toIntent); } } }

上面简单三部操作就完成了监听,实现业务代码。但是可能你即使完全按照上面来实现也不一定能监听到开机广播。我这边是调用底层软件接口给自己app加了一个超级白名单,所以能监听到开机广播。

还有一点需要注意第一次需要先启动app,下次开机重启才能监听到。我开发的这款app会在设备恢复出厂设置时候,用户设置手势结束。也就是大家说的oobe阶段,MP系统会拉起我们app。这样也就解决了需要手动打开下app,才能监听生效的问题。

正常来说,完成上面的需求基本完成。但是在测试时候,发现恢复出厂,用户设置手势结束,并没有拉起app。通过查看系统log,发现在恢复出厂设置,设备开机没多久,也就是在用户选择系统语言后,开机广播就发出来了。然后用户设置手势结束,即oobe阶段结束也就无法拉起app了。

总结下:正常开机重启,通过监听开机广播就能实现app自启动。但是恢复出厂设置,用户手势导航未结束,开机广播就发出,在等手势导航结束进入桌面时候,无法拉起app。

二. 监听ContentObserver,拉起app

为了处理上面这种恢复出厂设置情况下的拉起app。只能另辟蹊径了。这个时候找资料就能知道,一般大家用user_setu_complete,device_provisioned这两个参数,使用过程发现user_setu_complete获取不到,最后我使用的device_provisioned.

原理就是:可以通过传递状态值时,修改系统数据库的属性进行通信。恢复出厂时候设置device_provisioned=0,用户OOBE结束后,MP系统会设置device_provisioned=1,我们可以通过ContentObserver中的onchange监听device_provisioned值的改变去实现对应业务需求。

application类中实现注册监听(代码未验证,自己改吧改吧,意思就这个):

//注册 mContext.getContentResolver().registerContentObserver(Settings.System.getUriFor("device_provisioned"), false, mDeviceProvisionedObserver); //解绑 mContext.getContentResolver().unregisterContentObserver(mDeviceProvisionedObserver);

实现ContentObserver类处理业务:

private ContentObserver mDeviceProvisionedObserver=new ContentObserver(new Handler()) { public void onChange(boolean selfChange) { //监听device_provisioned=1执行拉起app操作 }; };

加上上面监听ContentObserver,和开机广播BOOT_COMPLETED。这样功能才算齐全了。

三.总结

综上:OOBE恢复出厂设置走的是监听ContentObserver拉起app;以后设备的正常电源键重启,走的是监听开机广播BOOT_COMPLETED,拉起app。

完结撒花!!!



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3