安卓开机引导(向导)页面,类似google开机设置引导

前言

开机引导页面,相信大家都不陌生吧,对了!就是想你想象中手机刚开始开机的时候出来的引导页面.
前段时间公司出了个需求需要手机销售数据和统计用户信息,本人也是在各种百度信息最后经过几番折腾才解决这个问题.特地写下来就当学习笔记吧.原理是仿写 SetupWizard 这个app的.

 先说需求:

安卓开机引导(向导)页面,类似google开机设置引导_第1张图片

类似这个引导页的.
为什么会这样做呢,主要是一些商家需要手机信息但又不想用户反感直接在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!

你可能感兴趣的:(安卓开发)