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

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

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

[html] view plain copy
  1. <application>
  2. <activityandroid:name="DefaultActivity"
  3. android:excludeFromRecents="true">
  4. <intent-filterandroid:priority="1">
  5. <actionandroid:name="android.intent.action.MAIN"/>
  6. <categoryandroid:name="android.intent.category.HOME"/>
  7. <categoryandroid:name="android.intent.category.DEFAULT"/>
  8. </intent-filter>
  9. </activity>
  10. lt;/application>

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

Provision中DefaultActivity的实现如下:

[java] view plain copy
  1. publicclassDefaultActivityextendsActivity{
  2. @Override
  3. protectedvoidonCreate(Bundleicicle){
  4. super.onCreate(icicle);
  5. //Addapersistentsettingtoallowotherappstoknowthedevicehasbeenprovisioned.
  6. Settings.Secure.putInt(getContentResolver(),Settings.Secure.DEVICE_PROVISIONED,1);
  7. //removethisactivityfromthepackagemanager.
  8. PackageManagerpm=getPackageManager();
  9. ComponentNamename=newComponentName(this,DefaultActivity.class);
  10. pm.setComponentEnabledSetting(name,PackageManager.COMPONENT_ENABLED_STATE_DISABLED,0);
  11. //terminatetheactivity.
  12. finish();
  13. }
  14. }

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

  1. 没有UI界面,只是设置Setting项里的Settings.Secure.DEVICE_PROVISIONED为1,指示其他Framework和其他程序,机器已经Provisioned。
  2. Line#10~#12之后,Launcher才会被启动,完成整个启动过程。

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

通过Provision,可以定制:

  • 加入一些初始设置项的设定,比如时区/时间初始设定,背景数据是否允许,是否允许安装非Android市场上的程序,等不需要用户干预就可以完成的设置。具体也可看SdkSetup中的DefaultActivity完成的设置,除了多了些设置项的设置,并没有太多区别。
  • 加入UI设计,引导用户一步步完成需要用户参与选择或输入的设置过程,也就是Setup Wizard的工作。Android Provision (Setup Wizard)

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. python list.sort()根据多个关键字排序的方法实现
  3. Android客户端与PC服务器实现Socket通信
  4. Android(安卓)滑动效果高级篇(七)—— 华丽翻页效果
  5. 【原创】Android锁定横竖屏、splash,全屏、去除标题的方法
  6. Android的多媒体框架OpenCore(PacketVideo)介绍
  7. Android判断网络是否打开,并打开设置网络界面
  8. 基于 android 数据备份恢复的一种实现
  9. [置顶] Android中_TextView属性的XML详解 包括单行显示等等。

随机推荐

  1. android环境配置和工程目录介绍
  2. 新增安全锁与“+1”特性 Android官方电子
  3. Android下用OpenGL画的一个旋转的圆形
  4. [Android] Android工程以jar包形式向第三
  5. 初学Android,字符串,数字,尺寸,数组资源(
  6. 依赖v7包和编译版本不一致问题####Error:
  7. Android 子线程更新UI的几种方法
  8. 【Android】代码实现模拟屏幕点击和键盘
  9. Android 修改Camera默认preview size预览
  10. 仿网易新闻顶部滑动条效果