开机引导页面,相信大家都不陌生吧,对了!就是想你想象中手机刚开始开机的时候出来的引导页面.
前段时间公司出了个需求需要手机销售数据和统计用户信息,本人也是在各种百度信息最后经过几番折腾才解决这个问题.特地写下来就当学习笔记吧.原理是仿写 SetupWizard 这个app的.
先说需求:
类似这个引导页的.
为什么会这样做呢,主要是一些商家需要手机信息但又不想用户反感直接在gg后面显示的吧.
先说说开机引导的原理:
在安卓机加载完linux内核后手机会进行一系列的初始化流程,别的我们不说,我们只要知道在系统的pakemanger 加载完所有的系统的apk后就会跳到launcher 也就是手机的桌面.实际上google的设置引导语言选择都是这种launcher的app.但是优先级比默认的launcher高,launcher默认0
例如 priority=4
如图
<activity
android:name=".xxxxx"
android:clearTaskOnLaunch="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:excludeFromRecents="true"
android:launchMode="singleInstance">
<intent-filter android:priority="4">
intent-filter>
activity>
那么我们只需要把一个应用设置优先比默认launcher高就可以了.
肯定有人想问怎么把app设置为Launcher吧,嘿嘿往下看
<activity
android:name=".xxxxx"
android:clearTaskOnLaunch="true"
android:configChanges="keyboardHidden|orientation|screenSize"
android:excludeFromRecents="true"
android:launchMode="singleInstance">
<intent-filter android:priority="4">
<action android:name="android.intent.action.MAIN">action>
<category android:name="android.intent.category.LAUNCHER">category>
<category android:name="android.intent.category.DEFAULT">category>
<category android:name="android.intent.category.HOME">category>
intent-filter>
activity>
是不是很简单,直接而在intent-filter 配置以上参数就可以了,最后吧这个app内置为系统软件就可以了,这个可以自己选择刷root进去,或者让厂商帮你放进去.这样下次首次开机向导页面就出来了.页面都是跟你平时使用activity帮顶页面一样.
其实所谓的launcher其实也就是一款普通的app软件.
是不是觉得这样就完了呢,还差最后一步呢,在app启动之后记得在ondestory()的方法吧这个activity页面销毁设置为不可见,不然会卡在这个页面,就算跳过去了下次开机或者返回桌面还会显示出来,这就是极度不好的体验了.
奉上 代码:
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
Settings.Global.putInt(getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);
}
Log.e("finishSetupWizard", "finishSetupWizard2");
} catch (Exception e) {
e.printStackTrace();
} finally {
PackageManager pm = getPackageManager();
ComponentName name = new ComponentName(this, FlystatisticsMainActivity.class);
pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
Log.e("finishSetupWizard", "finishSetupWizard3");
this.finish();
}
以上就是开机引导(向导)的实现了!
最后:有疑问的朋友随时联系我 q:759560522
end!