android provision
来源:互联网 发布:mybatis批量更新数据 编辑:程序博客网 时间:2024/04/28 07:39
之所以会关注DEVICE_PROVISIONED这个标记,是因为我在升级系统的时候遇到一个问题。系统在不格式化/data/分区的情况下(不进行双清操作)有可能会导致一个问题,机器的Home键按了没反应。
1、Provision程序
首先说说一下Provision,Provision在系统源码packages/apps下面,我们先看看Provision的配置:
<application> <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> </application>
从上面代码可以看到两个比较有意思的地方,第一:Provision配置了category.HOME属性,做系统开发的朋友应该都了解,category.HOME是桌面程序的标记,简单点说就是Launcher程序才会配置的标记。
第二:priority=1,配置了优先级,也就是说它的优先级比我们原生的Launcher优先级还要高,它会在Launcher启动前就运行起来。
//Edited by mythou//http://www.cnblogs.com/mythou/
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.Secure.putInt(getContentResolver(), Settings.Secure.DEVICE_PROVISIONED, 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(); }}
上面就是Provision的全部源码,Provision只有一个Activity,而且做的事情不多。主要做了两件事:
- 设置DEVICE_PROVISIONED标记
- 禁止Provision自己的Activity组件
整个Provision程序只做了这两件事,DEVICE_PROVISIONED就是我们上面说的系统升级完标记。这个标记是保存在:
保存在settings.db里面,准确来说是settings.db的secure表里面。
2、禁止组件
上面说了Provision其中一个功能,写入一个标记。除了写入标记,还有一个禁止本身Activity组件的功能。先简单介绍一下禁止组件的API。
void setComponentEnabledSetting (ComponentName componentName, int newState, int flags)
- componentName:组件名称
- newState:组件新的状态,可以设置三个值,分别是如下:
- 不可用状态:COMPONENT_ENABLED_STATE_DISABLED
- 可用状态:COMPONENT_ENABLED_STATE_ENABLED
- 默认状态:COMPONENT_ENABLED_STATE_DEFAULT
- flags:行为标签,值可以是DONT_KILL_APP或者0。 0说明杀死包含该组件的app
禁止组件功能后,系统的package信息会记录下来,有关系统的package信息都是保存在/data/system/
//Edited by mythou//http://www.cnblogs.com/mythou/
<package name="com.android.provision" codePath="/system/app/Provision.apk" nativeLibraryPath="/data/data/com.android.provision/lib" flags="1" ft="11b7e237e00" it="11b7e237e00" ut="11b7e237e00" version="15" userId="10005"><sigs count="1"><cert index="1" /></sigs><disabled-components><item name="com.android.provision.DefaultActivity" /></disabled-components></package>
上面就是记录了package里面被禁止的组件信息。当然,package.xml里面还包含了应用包所有信息,这个可以自己看一下。
这个组件只会运行一次,所以我们如果没有格式化/data目录,这个组件就会被禁止。所以会导致一个问题,就是我们的DEVICE_PROVISIONED标记不会再次写入。
如果你遇到了机器Home键没有作用,可以检查一下DEVICE_PROVISIONED标记是否正常。
3、结语
今天主要是说说原生的Provision作用,其实我们可以在Provision里面做一些升级后需要完成的事情,比如我们在电阻屏上需要进行坐标校准。就可以在Provision里面首先运行坐标校准,因为它会在Launcher之前运行。
这问题也查了很久,除了Provision外,还分析了Home键的详细处理机制。后面有空再分析一下Home键的处理机制。
- android provision
- android provision
- android provision
- Android Provision (Setup Wizard)
- Android Provision (Setup Wizard)
- Android Provision (Setup Wizard)
- Android Provision (Setup Wizard)
- Android Provision (Setup Wizard)
- android provision apk 分析
- Android Provision (OOBE)
- Android初始化Setup Wizard -- Provision
- Android 初始化Setup Wizard——Provision
- Android 初始化Setup Wizard——Provision
- Android 初始化Setup Wizard——Provision
- Android Provision(开机向导setupwizard程序)
- Android——锁定launch - 原生Browser启动 -引导provision
- provision接口
- 移动的provision接口
- 两台linux主机间互传文件的解决办法
- android设置微信聊天布局
- 什么是自动体外心脏去颤器(ATE)
- Android程序目录
- storm 基本命令
- android provision
- 我国计算机应用水平低,企业信息化水平低
- start.S进一步、更详细的、深入的解释和分析 2013.04.26更新(二)
- 可能要1万个人参与开发的一个产品
- DIV高度自适应
- ConditionVariable的用法
- namespace packages 命名空间包 学习总结
- rotocol buffer 实现高性能通讯
- 2014赛季中超联赛首轮山东鲁能为球迷而战