Android Provision (OOBE)
Android Provision (OOBE)
源码路径:android/packages/apps/Provision
在Android的原生代码中,Priovision只是一个第一次启动的设置向导,引导用户第一次使用机器设置语言、Wifi等等。
启动顺序:1.Provision ---> launcher ----> 按系统顺序执行流程
Provision在其AndroidManifest.xml中被定义如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.provision">
<original-package android:name="com.android.provision" />
<!-- For miscellaneous settings -->
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application>
<activity android:name="DefaultActivity"
android:excludeFromRecents="true">
<intent-filter android:priority="1">//系统启动后的优先级是1,比launcher还先启动,完成系统第一次设置后启动launcher
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application>
</manifest>
Activity DefaultActivity的category被定义成HOME,并且priority为1,是比系统Launcher启动还要早的程序。
Provision中DefaultActivity的实现如下:
- package com.android.provision;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.provider.Settings;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.os.Environment;
import android.content.res.AssetManager;
/**
* Application that sets the provisioned bit, like SetupWizard does.
*/
public class DefaultActivity extends Activity {
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
// Add a persistent setting to allow other apps to know the device has been provisioned./*//要添加的启动代码*/
- //开机后完成设置后,设置这两个标志;设置后才顺序launcher启动,启动整个系统流程
Settings.Global.putInt(getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 1);
Settings.Secure.putInt(getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1);
// remove this activity from the package manager.
PackageManager pm = getPackageManager();
ComponentName name = new ComponentName(this, DefaultActivity.class);
pm.setComponentEnabledSetting(name, PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
// terminate the activity.
finish();
}
}
Android Provision (OOBE)相关推荐
- Android OOBE开发
什么是OOBE 就是开机向导,在 Android 设备首次开机的时候,会先进行一系列的初始化,然后再进入主页. 初始化的操作一般有 登录或注册厂商账号.选择时区.选择语言等,TV的话还可能包括搜台等. ...
- Android 系统(123)---MTK android 常用修改点
MTK android 常用修改点 1. *#06#等关键码判断文件 SpecialCharSequenceMgr.java 2.音效 ControlPanelEffect.java 3.版本号修改 ...
- Android 设置向导启动分析
一.Android 系统启动流程 Bootloader 系统引导 启动 Linux 内核 启动 init 进程 启动 Zygote 进程 启动 SystemServer 进程 启动 Binder 线程 ...
- Android开机向导setupwizard,设置系统语言,WiFi向导
Android的框架设计有考虑到开机向导这一场景,因此我们实现开机向导参考Android的Provision.apk Provision: MSM8976/repo/packages/apps/Pro ...
- Android 5.1 AppOps总结
什么是AppOps 涉及的类 常用名词 权限管理是如何触发的 系统默认应用权限 AppOps Policy 文件 AppOpsService准备工作 详细分析权限管理的触发 应用层对权限的设置 什么是 ...
- 关于Provision.apk
今天遇到一个应用无法打开的问题,跟踪代码发现app在onCreate的时候会检查 inKeyguardRestrictedInputMode() 这是KeyguardManager的方法 解释为: / ...
- poco for android,POCO桌面(com.mi.android.globallauncher) - 2.6.8.25 - 应用 - 酷安
权限信息 · com.android.launcher.permission.INSTALL_SHORTCUT · com.miui.home.launcher.permission.UNINSTAL ...
- android ROM设置默认Launcher(主屏幕应用)
Launcher Launcher是android系统的桌面.是android系统的主要组件.android系统允许存在多个Launcher并设置默认主界面. 应用程序作为Home(主界面)需在Act ...
- ActivityManagerService解读之Activity启动时间闲聊--Android Framework层时间计算介绍
从ActivityManagerService解读之Activity启动初探,到ActivityManagerService解读之Activity启动再探,到ActivityManagerServic ...
最新文章
- UE4全景插件Nvidia Ansel Photography
- 配置完centos 6以后,大概需要安装的软件(主要是yum)
- Java泛型:类型擦除
- redis 集群目标、集群查看、配置方法及过程、哨兵配置启动
- java并发编程一:基础知识
- mysql path conflict_yum安装MySQL出现conflict problem
- 什么时候告白最合适?
- SpringCloud工作笔记042---fastjson生成json时Null属性不显示的解决方法
- 文本不换行,显示省略号
- 如何使用Java代码获取文件、文件流或字符串的编码方式
- 自己搭建了一个简单实用的Web版记事本
- 在线文本加密解密工具
- Python使用webdriver爬取百度文库
- MySQL:数据完整性
- (1)初识人员定位:对人员定位相关知识的自己的理解
- python实现主成分估计
- ceph kernel rbd (一): 简介
- MySQL 计算连续涨跌
- 百胜软件黄飞:携手阿里云,用双中台驱动新零售
- [案例][激励]关于个人贡献与团队贡献的激励制度(结合IT开发考虑)
热门文章
- Private Set Intersection(PSI)
- sql server 创建动态交叉表
- python主题更改_jupyter notebook更换皮肤主题的实现
- python3可视化-pyecharts图形库,利用Map进行地图的创建和使用
- 2022超级好用的接口自动化测试框架:基于python+requests+pytest+allure实现
- iSCSI target initiator
- 从平凡到不平凡(转)
- CF85D Sum of Medians
- 【HarmonyOS】鸿蒙3.0使用WebView进行链接跳转,告警“hwbr_engine_AwContentsClient: Denied starting an intent without a
- SameSite Cookie问题处理解决方案(谷歌Chome浏览器出现Whitelabel Error Page或者不停请求现象解决)