Provision主要作用是作为开机引导用户进行一些基本设置。但是在原生的 android 系统中,这个 provision 非常的简单,只有一个空白的 activity,这个主要就是留给 厂商自己定制的,
在Android中,寻找Launcher的时候是根据HOME的filter(在Manifest中定义的<category android:name="android.intent.category.HOME" />)来过滤,而Provision的DefaultActivity中不仅配置了category.HOMEcategory.HOME,还增加了<intent-filter android:priority="1">,
<activity android:name="DefaultActivity"
                android:excludeFromRecents="true">
            <intent-filter android:priority="1">
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.HOME" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
配置了权限为1,默认为0,如果有两个相同权限的,则弹框让用户选择启动哪一个。

DefaultActivity代码如下:
/**
 * 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.
        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();
    }
}

1、设置标签Settings.Global.DEVICE_PROVISIONED,标志代表了Android系统升级准备完成,可以正常工作(不是很理解)
2、禁止Provision自己的Activity组件

void setComponentEnabledSetting (ComponentName componentName, int newState, int flags) 
componentName:组件名称 
newState:组件新的状态,可以设置三个值,分别是如下:

不可用状态:COMPONENT_ENABLED_STATE_DISABLED
可用状态:COMPONENT_ENABLED_STATE_ENABLED
默认状态:COMPONENT_ENABLED_STATE_DEFAULT

最新文章

  1. 关于Kafka 的 consumer 消费者手动提交详解
  2. ami编码设计流程图_Openplant智慧电厂BIM设计-很强大(艾三维BIM分享)
  3. 英国法院裁定GCHQ黑客发动网络攻击并不侵犯人权
  4. linux vector 头文件,LINUX 之Vector用法
  5. mysql数据库root密码在哪个文件中_mysql - 本地数据库忘记了root用户的密码
  6. RabbitMQ exchange交换机机制
  7. 拼多多市值超2100亿美元 黄峥成中国第二大富豪
  8. 使用getGenericSuperclass()和getActualTypeArguments()将DAO做成泛型
  9. 谷歌:早在这个0day 补丁发布前几周,朝鲜国家黑客就已利用
  10. 拉取 google.golang.org/grpc 报错
  11. Java设计模式之十 ---- 访问者模式和中介者模式
  12. latex服务器java_latex入门
  13. 计算机忘记密码WIN7,win7忘记密码强制重置方法
  14. windows设置开机自动启动程序
  15. 微信小程序报错40163-“errmsg“解决方案
  16. Base64在线转换工具
  17. JSHOP2学习2:十分钟建立一个舒适的编译环境
  18. 搭建vpn linux,vpn在linux下搭建
  19. 总结学过的技术,实现加密注册,登录及过期不能访问,微信朋友圈功能,文章比较长,但是比较详细。
  20. etsy开店流程遇到的问题整理

热门文章

  1. 阿里云与华为USG防火墙IPSEC对接
  2. 简单解决SVN cleanup failed to process the following paths错误
  3. Python实现逻辑门
  4. bitbucket 预览html,BitBucket基本使用操作
  5. 微淘客推广技巧,教你如何用微信公众号淘客引流技巧
  6. Python第九章 文件系统
  7. Web前端——什么是web前端,什么是HTML及其常用标签
  8. 总结IDA调试app so库的三种方法
  9. 动态路由ospf、DR和BDR
  10. Linux 中断(IRQ/softirq)基础:原理及内核实现