http://blog.csdn.net/linghu_java/article/details/8128639

Android中很多框架性的设计都已经存在了,但在市场上的发布版本里却因为没有很好的理解Android的设计意图而进行自己的定制,或者自己又做一个冗余的实现。Android中的Provision其实就是类似刚出厂时或者恢复出厂设置之后,一步一步引导用户完成各种设置的Setup Wizard程序。

在Android的原生代码中,Provision并没有被编译进系统,这可能是Provision不被人所知的原因。另外SdkSetup是一个实现相同功能的程序,从名字来看,SdkSetup是被用来在模拟环境中完成初始设置的程序。

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

android:excludeFromRecents="true">

intent-filter>

activity>

lt;/application>

Activity DefaultActivity的category被定义成HOME,并且priority为1,是比系统Launcher启动还要早的程序。

Provision中DefaultActivity的实现如下:

publicclassDefaultActivity extendsActivity {

@Override

protectedvoidonCreate(Bundle icicle) {

super.onCreate(icicle);

// Add a persistent setting to allow other apps to know the device hasbeen provisioned.

Settings.Secure.putInt(getContentResolver(),Settings.Secure.DEVICE_PROVISIONED, 1);

// remove this activity from the package manager.

PackageManager pm = getPackageManager();

ComponentName name = newComponentName(this, DefaultActivity.class);

pm.setComponentEnabledSetting(name,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);

// terminate the activity.

finish();

}

}

DefaultActivity的原生实现只做了两件事:

没有UI界面,只是设置Setting项里的Settings.Secure.DEVICE_PROVISIONED为1,指示其他Framework和其他程序,机器已经Provisioned。

Line#10~#12之后,Launcher才会被启动,完成整个启动过程。

注意:还没有Provisioned的机器,有些功能的表现是不一样的。比如,如果还没有Provisioned,锁屏程序不会锁屏;对HOME key的处理也不同;电话也是打不进来的,etc。

通过Provision,可以定制:

加入一些初始设置项的设定,比如时区/时间初始设定,背景数据是否允许,是否允许安装非Android市场上的程序,等不需要用户干预就可以完成的设置。具体也可看SdkSetup中的DefaultActivity完成的设置,除了多了些设置项的设置,并没有太多区别。

加入UI设计,引导用户一步步完成需要用户参与选择或输入的设置过程,也就是Setup Wizard的工作。

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

http://blog.csdn.net/shenmay2012/article/details/20464317

主要做了两件事:

设置DEVICE_PROVISIONED标记

禁止Provision自己的Activity组件

整个Provision程序只做了这两件事,DEVICE_PROVISIONED就是我们上面说的系统升级完标记。这个标记是保存在:

保存在settings.db里面,准确来说是settings.db的secure表里面。

2、禁止组件

上面说了Provision其中一个功能,写入一个标记。除了写入标记,还有一个禁止本身Activity组件的功能。先简单介绍一下禁止组件的API。

voidsetComponentEnabledSetting (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/

"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">"1">"1" />

上面就是记录了package里面被禁止的组件信息。当然,package.xml里面还包含了应用包所有信息,这个可以自己看一下。

这个组件只会运行一次,所以我们如果没有格式化/data目录,这个组件就会被禁止。所以会导致一个问题,就是我们的DEVICE_PROVISIONED标记不会再次写入。

如果你遇到了机器Home键没有作用,可以检查一下DEVICE_PROVISIONED标记是否正常。

手机中的com.android.provision删除可不可以,Android Provision (Setup Wizard)相关推荐

  1. Android代码删除通知,Android:从通知中删除通知b

    Android:从通知中删除通知b 我已经创建了一个应用程序,并且我设法在android通知栏中添加通知. 现在我需要示例如何从事件通知栏中删除该通知? 11个解决方案 197 votes 你可以尝试 ...

  2. 手机中html文件能不能删除,如何彻底删除手机里的文件,并且不能被恢复?

    多下一些文件然后删除重复几次就可以了,如果你有被误删的文件的话就需要使用专业的恢复工具帮你进行找回了,具体操作步骤如下: 第一步:对于在手机中的文件误删后我们到底该怎么恢复呢?我们可以这样做,首先找到 ...

  3. android shell强制删除文件夹_原来手机中的这些文件可以删除,难怪手机越用越卡!...

    很多从 iOS 转移到 Android 生态的用户,总是会有这样的抱怨:Android 系统越用越卡,就算清理垃圾也没用! 但其实在Android系统中,除了日常的清理垃圾,我们还可以将一些没用的文件 ...

  4. 文件可以直接删除吗_原来手机中的这些文件可以删除,难怪手机越用越卡

    很多从 iOS 转移到 Android 生态的用户,总是会有这样的抱怨:Android 系统越用越卡,就算清理垃圾也没用! 但其实在Android系统中,除了日常的清理垃圾,我们还可以将一些没用的文件 ...

  5. android自动删除su,Android手机提示“su二进制过旧”的解决办法

    症状:近两天,手机通知栏总有个"#SU 二进制文件过旧--更新SU 二进制文件",点击后,进入"SU 二进制文件更新程序"页面,内框显示"正在下载 m ...

  6. android批量删除图片,Android RecyclerView单点、批量数据元素项目item的增加、删除和移动...

    Android RecyclerView单点.批量数据元素项目item的增加.删除和移动 前文附录1,2介绍了基本的Android RecyclerView单点.批量元素项目的更新.现在给出其他比较重 ...

  7. android代码删除wifi,Android Wifi的forget()操作实例详解_Android_脚本之家

    Android  Wifi的forget()操作实例详解 我们在处理某个Wifi连接时,有时会需要忘掉当前连接的密码信息.执行这项操作,我们需要调用WifiManager::forget()函数: / ...

  8. android listview 删除出错,Android Studio,删除ListView项目而不影响另一个项目

    我正在做一个ToDo List并且在从ListView中删除一个项目时遇到麻烦.Android Studio,删除ListView项目而不影响另一个项目 如果用户已经做到了名单上的一件事,他可以点击该 ...

  9. android 代码删除快捷方式,Android创建快捷方式以及删除快捷方式

    /** * * 创建快捷方式 * @param map 快捷方式图标 * @param appName 快捷方式标题 * @param appUrl 快捷方式打开的地址 * @param iconUr ...

  10. android realm删除对象,Android Realm-从服务访问Realm对象

    我在活动中创建了一个领域对象.我需要能够在我创建的服务中访问该对象.但是在服务中创建Realm对象时出现错误 mRealm = Realm.getInstance(getApplicationCont ...

最新文章

  1. Android混淆解析
  2. 《社会智能与综合集成系统》第1章1.节参考文献
  3. HTML 5新增的元素
  4. JBoss Forge NetBeans集成–入门
  5. hbase常见处理方式
  6. hashmap clone_Java HashMap clone()方法与示例
  7. 春节停车难?用 Python 找空车位!
  8. java spring log4j_配置spring的log4j日志记录
  9. 软件测试——白盒测试
  10. 嫡权法赋权法_赋权法_
  11. ktt算法 约化_matlab在热学中的应用
  12. linux配置和查看dns三种方式 Non-authoritative answer
  13. Python开发-Django表单
  14. 移动定位业务之“OTDOA(观察到达时间差)”
  15. 三星a5009Android6.0,三星A5009 6.0 root教程及获取6.0的root权限
  16. [转贴]汽车相关英语词汇
  17. Linux中的/proc文件系统详解(C/C++代码实现)
  18. JAVA网易云热评接口_网易云音乐热评爬虫(一): 反编译加密参数
  19. centos7安装twisted出现“致命错误:Python.h:没有那个文件或目录”的终极解决办法
  20. 【疾病检测】基于matlab机器视觉黑色素瘤皮肤癌检测【含Matlab源码 1689期】

热门文章

  1. 阿里云服务器地域节点测试IP分享(国内+海外)Ping值延迟测试
  2. mmClassification学习笔记
  3. 【Codex】Evaluating Large Language Models Trained on Code
  4. win10 net framework 3.5提示错误代码0x800f081f
  5. 应届毕业生外包公司体验
  6. 分布式时序数据库作为工业物联网数据后台的7大优势
  7. 业务流程管理(BPM)系统的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  8. win10计算机删除了怎么恢复,Win10系统删除的文件怎么恢复?
  9. xcode 常见错误
  10. 华硕 x570 Ryzen 9 5900X电脑 Hackintosh 黑苹果efi引导文件