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

 

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

 

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

[html]  view plain copy
  1. <application>  
  2.    <activity android:name="DefaultActivity"  
  3.            android:excludeFromRecents="true">  
  4.        <intent-filter android:priority="1">  
  5.             <action android:name="android.intent.action.MAIN" />  
  6.             <category android:name="android.intent.category.HOME" />  
  7.             <category android: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. public class DefaultActivity extendsActivity {  
  2.    @Override  
  3.    protected void onCreate(Bundle icicle) {  
  4.        super.onCreate(icicle);  
  5.   
  6.        // Add a persistent setting to allow other apps to know the device hasbeen provisioned.  
  7.        Settings.Secure.putInt(getContentResolver(),Settings.Secure.DEVICE_PROVISIONED, 1);  
  8.   
  9.        // remove this activity from the package manager.  
  10.        PackageManager pm = getPackageManager();  
  11.        ComponentName name = new ComponentName(this, DefaultActivity.class);  
  12.        pm.setComponentEnabledSetting(name,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);  
  13.   
  14.        // terminate the activity.  
  15.        finish();  
  16.     }  
  17. }  
 

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的工作。

更多相关文章

  1. 浅谈Java中Collections.sort对List排序的两种方法
  2. python list.sort()根据多个关键字排序的方法实现
  3. Android(安卓)修改spinner 字体颜色 样式的方法
  4. 安卓应用实用功能的技术实现:《Android消息推送实现》 | Android(
  5. 抓包工具Fidder详解(主要来抓取Android中app的请求)
  6. Android(安卓)录音实现追踪(Android(安卓)7.1)
  7. android仿iPhone滚轮控件实现及源码分析(二)
  8. Android实现背景图自适应不失真(上)
  9. Android中Fragment和ViewPager那点事儿(仿微信APP)

随机推荐

  1. 【源码分享下载】每日更新之Android应用
  2. Android学习系列(7)--App消息通知机制
  3. Android 反编译资料整理
  4. Android中获取应用程序(包)的信息-----Pa
  5. Android Studio——Android Studio更新升
  6. 用 Python脚本生成 Android SALT 扰码
  7. Android(安卓)控件之ProgressBar进度条
  8. Android-Jni线程(二)— 线程锁之生产者消费
  9. ANDROID版本号和版本名称的重要性介绍
  10. Android(安卓)UI设计的基础