Android Provision (OOBE)

源码路径:android/packages/apps/Provision

在Android的原生代码中,Priovision只是一个第一次启动的设置向导,引导用户第一次使用机器设置语言、Wifi等等。

启动顺序:1.Provision ---> launcher ----> 按系统顺序执行流程

Provision在其AndroidManifest.xml中被定义如下:

<?xml version="1.0" encoding="UTF-8"?>

<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的实现如下:

[java] view plaincopy
  1. 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.

    /*
    //要添加的启动代码
    */
  1.         //开机后完成设置后,设置这两个标志;设置后才顺序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)相关推荐

  1. Android OOBE开发

    什么是OOBE 就是开机向导,在 Android 设备首次开机的时候,会先进行一系列的初始化,然后再进入主页. 初始化的操作一般有 登录或注册厂商账号.选择时区.选择语言等,TV的话还可能包括搜台等. ...

  2. Android 系统(123)---MTK android 常用修改点

    MTK android 常用修改点 1. *#06#等关键码判断文件 SpecialCharSequenceMgr.java 2.音效 ControlPanelEffect.java 3.版本号修改 ...

  3. Android 设置向导启动分析

    一.Android 系统启动流程 Bootloader 系统引导 启动 Linux 内核 启动 init 进程 启动 Zygote 进程 启动 SystemServer 进程 启动 Binder 线程 ...

  4. Android开机向导setupwizard,设置系统语言,WiFi向导

    Android的框架设计有考虑到开机向导这一场景,因此我们实现开机向导参考Android的Provision.apk Provision: MSM8976/repo/packages/apps/Pro ...

  5. Android 5.1 AppOps总结

    什么是AppOps 涉及的类 常用名词 权限管理是如何触发的 系统默认应用权限 AppOps Policy 文件 AppOpsService准备工作 详细分析权限管理的触发 应用层对权限的设置 什么是 ...

  6. 关于Provision.apk

    今天遇到一个应用无法打开的问题,跟踪代码发现app在onCreate的时候会检查 inKeyguardRestrictedInputMode() 这是KeyguardManager的方法 解释为: / ...

  7. poco for android,POCO桌面(com.mi.android.globallauncher) - 2.6.8.25 - 应用 - 酷安

    权限信息 · com.android.launcher.permission.INSTALL_SHORTCUT · com.miui.home.launcher.permission.UNINSTAL ...

  8. android ROM设置默认Launcher(主屏幕应用)

    Launcher Launcher是android系统的桌面.是android系统的主要组件.android系统允许存在多个Launcher并设置默认主界面. 应用程序作为Home(主界面)需在Act ...

  9. ActivityManagerService解读之Activity启动时间闲聊--Android Framework层时间计算介绍

    从ActivityManagerService解读之Activity启动初探,到ActivityManagerService解读之Activity启动再探,到ActivityManagerServic ...

最新文章

  1. UE4全景插件Nvidia Ansel Photography
  2. 配置完centos 6以后,大概需要安装的软件(主要是yum)
  3. Java泛型:类型擦除
  4. redis 集群目标、集群查看、配置方法及过程、哨兵配置启动
  5. java并发编程一:基础知识
  6. mysql path conflict_yum安装MySQL出现conflict problem
  7. 什么时候告白最合适?
  8. SpringCloud工作笔记042---fastjson生成json时Null属性不显示的解决方法
  9. 文本不换行,显示省略号
  10. 如何使用Java代码获取文件、文件流或字符串的编码方式
  11. 自己搭建了一个简单实用的Web版记事本
  12. 在线文本加密解密工具
  13. Python使用webdriver爬取百度文库
  14. MySQL:数据完整性
  15. (1)初识人员定位:对人员定位相关知识的自己的理解
  16. python实现主成分估计
  17. ceph kernel rbd (一): 简介
  18. MySQL 计算连续涨跌
  19. 百胜软件黄飞:携手阿里云,用双中台驱动新零售
  20. [案例][激励]关于个人贡献与团队贡献的激励制度(结合IT开发考虑)

热门文章

  1. Private Set Intersection(PSI)
  2. sql server 创建动态交叉表
  3. python主题更改_jupyter notebook更换皮肤主题的实现
  4. python3可视化-pyecharts图形库,利用Map进行地图的创建和使用
  5. 2022超级好用的接口自动化测试框架:基于python+requests+pytest+allure实现
  6. iSCSI target initiator
  7. 从平凡到不平凡(转)
  8. CF85D Sum of Medians
  9. 【HarmonyOS】鸿蒙3.0使用WebView进行链接跳转,告警“hwbr_engine_AwContentsClient: Denied starting an intent without a
  10. SameSite Cookie问题处理解决方案(谷歌Chome浏览器出现Whitelabel Error Page或者不停请求现象解决)