android开机向导一般是谷歌的应用,是没有源码的.但是谷歌提供了接口供OME自定义.能够简单实现在开机向导中增加自己界面的功能.自定义开机向导要两个部分.第一部分是要添加的用户界面.第二部分谷歌提供的客制化接口.需要注意的是不同android版本,可能定制的方法不一样.这里我记录的是android P版本.
加入开机向导的界面有以下要求:
这个官方文档例子
public class MyActivity extends Activity {
private static final int NEXT_REQUEST_CODE = 1; // Can be any positive int
//--------1--------//
public void done(boolean success) {
int resultCode = success ? Activity.RESULT_OK : ResultCodes.RESULT_SKIP;
//--------2--------//
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.
}
}
上面1处,done这个方法,是在用户点击skip或完成界面操作后调用,如果是跳过就返回RESULT_SKIP,否则RESULT_OK,这个返回值在后面的脚本配置用得上.后面的Finnish被官方注释掉,官方特别提示不能finish,亲测finish后,会直接返回到上一个界面,导致无法结束开机向导
上面2处对应的Intent,它的action是action com.android.wizard.NEXT,这个action是通知开机向导进入下一个界面.通过抓log可以发现,开机向导每一个界面的跳转都会发这个action
以前是通过自己写apk来配置脚本,android 8后,谷歌在gms包内加一个GmsSampleIntegration应用,通过这个应用配置开机向导和launcher.这里我们要用其配置开机向导的功能.配置脚本在
vendor/google/apps/GmsSampleIntegration/res/raw
在config.xm定义了初始的脚本android.resource://com.google.android.gmsintegration/raw/wizard_script
脚本的格式如下:
wizard:name: 是个标签,方便其他地方调用这个WizardAction
wizard:uri: 这个WizardAction对应的action,对应activity的action放在里面,
wizard:resultCode: 就是上面代码的返回值.这个的action就是对应activity的action,
上面的界面就是在fingerprint在执行skip后,进入face_unlock这个界面.face_unlock就是com.android.settings.suggested.FACEID_ENROLL这个action的界面.
如果需要不管返回结果,下个界面都要跳转到face_unlock就把
替换
(1)无法跳转到指定界面
确保你action是正确的,用adb验证一下,
(2)点击skip或完成操作后退回上一步
看Activity是否用finish结束了
(3)如果所使用的Activity是之前setting的界面,在结束的时候调用finish了
客户自己在写一个界面,然后startActivtyForResult调用指定界面,然后onActivityResult处理