田海立@CSDN

2012-7-30

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

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

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

    <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>

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

Provision中DefaultActivity的实现如下:

public class DefaultActivity extendsActivity {   @Override   protected void onCreate(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 = new ComponentName(this, DefaultActivity.class);       pm.setComponentEnabledSetting(name,PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);       // terminate the activity.       finish();    }}

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. 博文视点大讲堂35期-It's Android Time:程序员创富有道! 圆满结束
  2. It's Android Time:程序员创富有道
  3. [android] 将Java程序移植到android上
  4. Google:Android将尝试兼容iPhone程序
  5. android中的照相机机拍照程序(含连续拍照)
  6. Android自定义视图二:如何绘制内容
  7. Android应用程序窗口(Activity)的运行上下文环境(Context)的创建过程

随机推荐

  1. Android Power Management【by Steve Guo
  2. Android中播放视频
  3. Android根据不同语言切换图片
  4. android 命令行创建工程
  5. Android MenuItem 设置文字颜色-TextColo
  6. Android UI控件详解-AutoComplete-TextVi
  7. Android hex RGB 各种颜色值 colors.xml
  8. android中实现图片的上下移动
  9. Android 图片处理工具类汇总
  10. android UI自定义设计圆形ImageView