美文网首页
Android 开机向导项目总结

Android 开机向导项目总结

作者: 过期的薯条 | 来源:发表于2023-03-02 09:59 被阅读0次

    1.引言

    最近开发了一个开机向导的项目。记录下整个项目的收获,以及问题。供以后参考

    2.正题

    开机向导是整个Android的第一个程序。它具备以下特性:

    • 走完开机向导,不会走第二遍
    • 优先级比launcher还高
    • 开机向导中自动禁用了Home键等
    1. 开发开机向导App,首先要在AndroidManifest 声明 改软件是开机向导:
     <intent-filter android:priority="1000">
                    <category android:name="android.intent.category.DEFAULT" />
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                    <category android:name="android.intent.category.SETUP_WIZARD" />//开机向导
                    <category android:name="android.intent.category.HOME" />// Home程序
    </intent-filter>
    
    1. 开机向导走完了一遍,不会走第二遍的原因是,系统记录了一些flag值。在开机向导最后一个界面的时候,执行如下方法,设置flag值
     private void finishSetupWizard() {
            // Add a persistent setting to allow other apps to know the device has been provisioned.
            Settings.Global.putInt(getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);
            Settings.Secure.putInt(getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1);
            PackageManager pm = getPackageManager();
            if (pm.hasSystemFeature(PackageManager.FEATURE_LEANBACK) == true) {
                Settings.Secure.putInt(getContentResolver(), Settings.Secure.TV_USER_SETUP_COMPLETE, 1);
            }
            // remove this activity from the package manager.
            ComponentName name = new ComponentName(this, DefaultActivity.class); //替换成自己的开机向导 第一个界面。代表禁用四大组件
            pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED, PackageManager.DONT_KILL_APP);
            finish();
        }
    
    

    3.为了方便开发调试。可以通过以下命令,来更改上面的flag值:

    adb root
    adb remount
    adb shell
    settings put global device_provisioned 0
    settings put secure user_setup_complete 0
    
    //开启开机向导的第一个activity
    pm enable com.android.provision/com.android.provision.DefaultActivity
    sync   //需要等待几秒钟 刷新数据
    reboot
    

    重启之后,又进入到了开机向导。

    4.开发完毕开机向导,需要内置于系统,并且要覆盖系统默认的开机向导程序。并且还得系统签名,还得放在system/app 或者privte-app下。核心的Android.bp 配置

    android_app_import {
     name: "SetUpWizard",
     apk: "SetUpWizard/SetUpWizard.apk",
     certificate: "platform",
     privileged: true,
     overrides: ["Provision"],
    }
    

    参考链接:https://www.jianshu.com/p/f31ad1b86f42

    相关文章

      网友评论

          本文标题:Android 开机向导项目总结

          本文链接:https://www.haomeiwen.com/subject/gizrldtx.html