【问题标题】:Custom Activity at first launch (initialization wizard)首次启动时的自定义活动(初始化向导)
【发布时间】:2013-08-14 21:48:40
【问题描述】:

我想定义我自己的“SetupWizard”应用程序。 为此,我正在使用这个意图过滤器,它工作正常:

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

【问题讨论】:

  • 将第二个活动作为您的主要活动并首次调用 SetupWizard 活动
  • 已经是这样了,接收到Intent的Activity刚刚启动了第二个Activity
  • 我所说的是将 setupwizard 作为您的第二个活动并仅在第一次启动它。即不要把它作为你的主要活动。

标签: android android-intent wizard intentfilter


【解决方案1】:

对于自定义 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" />

【讨论】:

  • 我们是否需要将 apk 推送到系统/应用程序才能使其工作?
  • 是的,您的 apk 必须在 system/app 或 system/priv-app 内。
【解决方案2】:

对于自定义 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();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多