Android8.0 Setupwizard 定制

google setupwizard 是可以定制,你可以替换掉里面的页面,也可以新添加页面。实现方法就是overlay,用一个定制过的apk。这里google已经实现了,我们只需要修改对应的app就行。
vendor/google/gms/apps/GmsSampleIntegration

介绍:

1.申明一个Overlay APK
这个APK必须要接受​
com.android.setupwizard.action.PARTNER_CUSTOMIZATION广播

        <receiver android:name=".SuwCustomizationReceiver">
            <intent-filter>
                <action android:name="com.android.setupwizard.action.PARTNER_CUSTOMIZATION" />
            </intent-filter>
        </receiver>

2.定制wizard script
config.xml标示了会加载哪个script

<resources>
    <string name="wizard_script_uri" translatable="false">android.resource://com.google.android.gmsintegration/raw/wizard_script</string>
</resources>

wizard_script.xml

<!-- Welcome screen with language selection -->
<WizardAction id="welcome"
wizard:uri="intent:#Intent;action=com.android.setupwizard.WELCOME;end">
<result wizard:action="carrier_setup" />
</WizardAction>
<!-- Privileged carrier setup app -->
<WizardAction id="carrier_setup"
wizard:uri="intent:#Intent;action=com.android.setupwizard.CARRIER_SETUP;end">
<result wizard:name="ok"
wizard:resultCode="-1"
wizard:action="wifi_settings" />
<result wizard:name="not_ready"
wizard:resultCode="1"
wizard:action="wifi_settings" />
<result wizard:action="activation_check" />
</WizardAction>
。。。。。。

action就是用来启动相应的script,比如在settings中有相关的action设置,到时候setupwizard就会来加载对应的activity。
result就是执行玩当前的script,下一步的script。如果没有result,就直接结束。

要想定制自己的script,只需要新建一个自己的WizardAction,然后实现相应的intent。

<WizardAction id="welcome"
wizard:uri="intent:#Intent;action=com.android.setupwizard.WELCOME;end">
<result wizard:action=" ​my_action ​" />
</WizardAction>
<!-- New custom action -->
<WizardAction id="my_action"
wizard:uri="intent:#Intent;action=com.my.package.ADDITIONAL;end">
<result wizard:action="carrier_setup" />
</WizardAction>

注意:WizardAction顺序不能乱写,后面注释有描述,有的可以定制,有的不能。

    <!-- OEM completion [CUSTOMIZABLE] -->
    <WizardAction id="oem_post_setup"
        wizard:uri="intent:#Intent;action=com.android.setupwizard.OEM_POST_SETUP;end" />


    <!-- Leave Setup Wizard [REQUIRED] -->
    <WizardAction id="exit"
        wizard:uri="intent:#Intent;action=com.android.setupwizard.EXIT;end" />

3.如何处理下一步
当当前页面处理完后,要进入下一个页面,将会发送一个action:​
com.android.wizard.NEXT。这个intent应当包含extras,来表明script,当前action和result code。


    public class MyActivity extends Activity {
        private static final int NEXT_REQUEST_CODE = 1; // Can be any positive int

        public void done(boolean success) {
            int resultCode = success ? Activity.RESULT_OK : ResultCodes.RESULT_SKIP;
            Intent intent = WizardManagerHelper.getNextIntent(getIntent(), resultCode);
            startActivityForResult(intent, NEXT_REQUEST_CODE);
            // finish(); // Optional. Calling finish will remove this activity from the
            // back stack, such that this activity will be skipped if the
            // user clicks back from the next screen.
        }
    }
### 解决SetupWizard中缺失Google移动服务(GMS)的方法 对于SetupWizard流程中未显示GMS的问题,这通常涉及到设备配置以及特定版本的支持情况。如果遇到SetupWizard没有展示预期的GMS组件或选项,可能是因为该过程被定制化调整过,移除了部分标准界面[^1]。 针对此状况,建议采取如下措施: #### 检查并确认GMS支持状态 确保所使用的Android操作系统版本已获得最新的GMS更新。例如,在2018年12月发布的更新适用于Android 9, 8.1 和 8.0,并且自2019年2月12日起成为必要条件以获取GMS批准[^2]。因此,首先应验证当前系统的GMS是否处于最新状态。 #### 定制化的SetupWizard脚本审查 若发现确实存在缺少的时间设置或其他重要页面,则可能是由于`/vendor/partner_gms/apps/GmsSampleIntegration/res/raw/wizard_script.xml` 文件中的定义进行了修改所致。通过检查这个XML文件的内容来判断是否有意地排除了某些必要的步骤或功能模块。 #### 生物识别集成核查 另外值得注意的是,为了使SetupWizard能够顺利引导用户完成生物特征认证(如指纹、面部解锁),不仅需要确保相应的Activity (`com.google.android.setupwizard.BIOMETRIC`) 被正确调用,还需要保证至少有一种有效的生物识别服务正在运行(例如 `FaceService` 或者 `FingerprintService`)。任何一方缺失都可能导致整个流程无法按预期工作[^3]。 综上所述,解决SetupWizard缺乏GMS表现的关键在于核实系统更新状态、审查定制脚本以及确保所有必需的服务均正常运作。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值