当前位置: 首页 > news >正文

Android开机向导定制(1)开机向导加载流程

   SetupWizard开机引导是一个系统APP,第一次开机或者恢复出厂设置后,优先于其他APP启动,完成系统设置。

1、打开/vendor/sprd/platform/packages/apps/SetupWizard/AndroidManifest.xml

找到:    

..........................................
<application     android:label="@string/app_name"android:icon="@mipmap/ic_launcher"android:theme="@style/SudThemeGlifV3.Light"android:uiOptions="none"android:taskAffinity="com.android.wizard"android:name=".SetupWizardApp">
.........................................

先看SetupWizardApp做了什么,在SetupWizardApp的onCreate方法:

  @Overridepublic void onCreate() {super.onCreate();if (LOGV) {Log.v(TAG, "onCreate()");}NetworkMonitor.initInstance(this);PhoneMonitor.initInstance(this);SetupWizardUtils.disableComponentsForMissingFeatures(this);SetupWizardUtils.setMobileDataEnabled(this, false); sStatusBarManager = SetupWizardUtils.disableStatusBar(this);mHandler.postDelayed(mRadioTimeoutRunnable, SetupWizardApp.RADIO_READY_TIMEOUT);}

在开机引导模式下,状态栏、无线数据是被禁止使用的。

继续转到AndroidManifest.xml,找到

<activity android:name=".SetupWizardActivity"android:label="@string/activity_label_empty"android:lockTaskMode="normal"android:launchMode="singleTask"android:excludeFromRecents="true"android:configChanges="keyboard|keyboardHidden|mcc|mnc|orientation|screenSize"android:immersive="true"android:exported="false"android:windowSoftInputMode="stateAlwaysHidden"android:theme="@style/NoDisplay"><intent-filter android:priority="9"><action android:name="android.intent.action.MAIN" /><action android:name="android.intent.action.DEVICE_INITIALIZATION_WIZARD" /><category android:name="android.intent.category.HOME" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>

SetupWizardActivity是主启动Activity,android:priority="9"指名接收优先级最高。

在SetupWizardActivity的onCreate方法:

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);if (LOGV) {Log.v(TAG, "onCreate savedInstanceState=" + savedInstanceState);}if (WizardManagerHelper.isUserSetupComplete(this)) {SetupWizardUtils.finishSetupWizard(this);finish();} else {onSetupStart();SetupWizardUtils.enableComponent(this, WizardManager.class);Intent intent = new Intent(ACTION_LOAD);if (isPrimaryUser()) {intent.putExtra(EXTRA_SCRIPT_URI,getString(R.string.lineage_wizard_script_user_uri));}intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | FLAG_GRANT_READ_URI_PERMISSION);try{startActivity(intent);}catch(Exception e){finish();}finish();}}

代码看,开机向导完成后,SetupWizardActivity每次开机重启后并不是不启动,而是判断已经设置完成后,就直接finish了,而开机设置是通过intent传递参数启动后面的设置。

打开strings.xml,找到相应的value:

................................................. 
<string name="lineage_wizard_script_user_uri" translatable="false">android.resource://org.lineageos.setupwizard/raw/lineage_wizard_script_user</string>
.............................................

真正后面要执行的是raw资源下的lineage_wizard_script,这是一个xml文件,后面再介绍这个。

http://www.dtcms.com/a/213833.html

相关文章:

  • 《软件工程》第 15 章 - 软件度量与估算:从概念到实践​
  • opencvsharp usb摄像头录像 c# H264编码
  • Python 网络编程入门
  • MMA: Multi-Modal Adapter for Vision-Language Models论文解读
  • macOS烧录stm32程序初步成功
  • 海思3519V200 上基于 Qt 的 OpenCV 和 MySql 配置开发
  • Simple Factory(简单工厂)
  • 《软件工程》第 14 章 - 持续集成
  • C++——STL——unordered_map与unordered_set的使用以及使用哈希表封装unordered_map/set
  • DIY 自己的 MCP 服务-核心概念、基本协议、一个例子(Python)
  • ChatGPT 如何工作——提示工程、对话记忆与上下文管理解析
  • 最新Spring Security实战教程(十六)微服务间安全通信 - JWT令牌传递与校验机制
  • 从“无我”到“无生法忍”:解构执着的终极智慧
  • Godot的RichTextLabel富文本标签,鼠标拖拽滚动,方向键滚动,底部吸附,自动滚动
  • 时序模型上——ARIMA/MA/AR
  • OpenCV图像认知(二)
  • 编程中优秀大模型推荐:特点与应用场景深度分析
  • JAVA Apache POI实战:从基础Excel导出入门到高级功能拓展
  • java写一个简单的冒泡排序
  • vue实例 与组件实例
  • 视频存储开源方案
  • Flutter Web 3.0革命:用WebGPU实现浏览器端实时光追渲染,性能提升300%
  • 论文分享之Prompt优化
  • C++模板与字符串:从入门到精通
  • 什么是HTTP HTTP 和 HTTPS 的区别
  • SQL进阶之旅 Day 4:子查询与临时表优化
  • vue3获取两个日期之间的所有时间
  • PostgreSQL日志管理完整方案(AI)
  • 关于Python编程语言学习的入门总结
  • SQL:合并查询(UNION)