Kan-Ru Chen's Weblog

AndroidDev: Provision the device

在 Devkit8000 上把 HOME key 設定好後卻無法作用,仔細看了下處理 HOME key 的地方是 polices 下的 PhoneWindowManager.java,會去檢查這個 device 是否被 "Provision" 了。

這個 Provision 的動作其實就是 Device 第一次啟用時做初始設定,在 Google phone 上面就是 SetupWizard,在 emulator 裏面則有簡單的 Provision.apk,之前無法作用就是因為一直沒有把 Provision.apk 放進去...

Provision.apk 做了什麼事呢?其實很簡短:

    public class DefaultActivity extends Activity {
     
        @Override
        protected void onCreate(Bundle icicle) {
            super.onCreate(icicle);
     
            // Add a persistent setting to allow other apps to know
            // the device has been 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();
        }
    }

因此若要提供一個類似 SetupWizard 的初始化介面在 Devit8000 上面,只要延伸這個 Provision.apk 做的事,提供 GUI 等等,最重要的就是設定這個 "Settings.Secure.DEVICE_PROVISIONED"