田海立@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. android textview xml 属性设置
  2. Android(安卓)M新控件之FloatingActionButton,TextInputLayout,Sna
  3. Android(安卓)属性动画(Property Animation) 源码解析 深入了解其
  4. android的一些属性
  5. Android(安卓)Window类
  6. android自学第二天 Android(安卓)API Guide学习和LinearLayout布
  7. Android(安卓)中关于CheckBox、RadioButton、TextView设置图形与
  8. android RelativeLayout属性和使用, 实现上面view叠加在下面view
  9. Android(安卓)下使用 JSON 实现 HTTP 请求

随机推荐

  1. React Native跳转android原生界面
  2. ListView中一些效果的实现
  3. android 实现ListView中添加RaidoButton
  4. Android手机定位案例代码
  5. Android(安卓)优秀开源框架集合
  6. SharedPreferences保存少量的数据
  7. android 静默安装并自启
  8. [Android(安卓)Pro] AES加密
  9. Android(安卓)应用界面开发笔记 Service
  10. 多条柱状图图