美文网首页
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