首次启动时的自定义活动(初始化向导)

时间:2013-08-13 10:12:58

标签: android android-intent wizard intentfilter

我想定义自己的“SetupWizard”应用程序。 为此,我使用这个intent-filter,它工作正常:

<intent-filter android:priority="5">
        <action android:name="android.intent.action.MAIN" />
        <action android:name="android.intent.action.DEVICE_INITIALIZATION_WIZARD" />
        <category android:name="android.intent.category.HOME" />
        <category android:name="android.intent.category.DEFAULT" />
</intent-filter>

但是我不知道如何判断巫师已经结束了。 现在,它只是在我最后一次完成()调用之后循环。

我该怎么说呢?

TKX。

2 个答案:

答案 0 :(得分:5)

对于自定义ROM,我在设置用户后做了类似的事情:

PackageManager pm = getPackageManager();
pm.setComponentEnabledSetting(new ComponentName("com.domain.yourapp", "com.domain.yourapp.SetupWizardActivity"), PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);

这是CM设置向导完成后自动禁用的功能。您需要CHANGE_COMPONENT_ENABLED_STATE权限。

我的向导活动在AndroidManifest.xml中有以下内容:

<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.DEVICE_INITIALIZATION_WIZARD" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />

答案 1 :(得分:0)

对于自定义ROM,请执行以下操作:
例如在你的onPause()或任何其他触发方法做类似的事情:

// set DEVICE_PROVISIONED flag because we will end setup wizard and our application.
Settings.Secure.putInt(getContentResolver(), Settings.Secure.DEVICE_PROVISIONED, 1);
// enable quicksettings
Settings.Secure.putInt(getContentResolver(), Settings.Secure.USER_SETUP_COMPLETE, 1);
// remove your activity from package manager
final ComponentName yourActivityCompName = new ComponentName(this, yourSetupWizardClass.class);
final PackageManager packageMngr = getPackageManager();
try {
    packageMngr.setComponentEnabledSetting(yourActivityCompName,
                PackageManager.COMPONENT_ENABLED_STATE_DISABLED, 0);
} catch (IllegalArgumentException illArgExcp) {
    Log.d(TAG, "IllegalArgumentException: The package name or/and class name you try to remove is not available");
}
finish();