当前位置: 首页 > 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文件,后面再介绍这个。

相关文章:

  • 《软件工程》第 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实例 与组件实例
  • 曰本真人性做爰视网站/百度指数人群画像哪里查询
  • hbuilder制作网页代码/seo包年优化
  • 呼和浩特免费制作网站/app下载免费安装
  • 武汉哪些网站做免费广告/微信营销软件手机版
  • 天门网站/seo课程培训学校
  • 泰州seo顾问服务/百度seo推广软件