当前位置: 首页 > news >正文

Android Google 开机向导定制 setup wizard

Android 开机向导定制

采用 rro_overlays 机制来定制开机向导,定制文件如下:

GmsSampleIntegrationOverlay$ tree
.
├── Android.bp
├── AndroidManifest.xml
└── res
└── raw
├── wizard_script_common_flow.xml
├── wizard_script_customize_flow.xml
└── wizard_script.xml

Android.bp

runtime_resource_overlay {name: "GmsSampleIntegrationOverlay",product_specific: true,
}

在项目对应的.mk 文件添加编译引用

PRODUCT_PACKAGES += \GmsSampleIntegrationOverlay

AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<!--
#/*
# * Copyright (C) 2023 Lens Technology (Xiangtan) Co.,Ltd, All rights reserved.
# * Author: XT900109
# */
-->
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.xxxx.gmssampleintegrationsoverlay"android:versionCode="1"android:versionName="1.0"><application android:hasCode="false" /><overlay android:targetPackage="com.google.android.gmsintegration"android:priority="0"android:isStatic="true" />
</manifest>

rro_overlays/GmsSampleIntegrationOverlay/res/raw/wizard_script_lens_customize_flow.xml

自定义 wizard_script_customize_flow.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--The wizard:uris recorded here have the inconvenience of being generated by hand, but they allowfor the full spread of launch flags (we need FLAG_ACTIVITY_NEW_TASK [0x10000000]), where the<intent> tag processed by Intent.parseIntent() does not.adb shell am to-intent-uri -a com.android.setupwizard.WELCOME -f 0x10000000 \-\-ez firstRun true
--><WizardScript xmlns:wizard="http://schemas.android.com/apk/res/com.google.android.setupwizard"wizard:firstAction="user_terms_of_service1"><WizardAction id="user_terms_of_service1"wizard:uri="intent:#Intent;action=com.android.setupwizard.USER_TERMS_OF_SERVICE;end" ><result wizard:action="user_service_notice" /></WizardAction><WizardAction id="user_service_notice"wizard:uri="intent:#Intent;action=com.android.setupwizard.USER_SETUP_FINISH;end" ></WizardAction><!--    <WizardAction id="END_OF_SCRIPT"wizard:uri="intent:#Intent;action=com.android.setupwizard.EXIT;end" />-->
</WizardScript>

在 wizard_script_common_flow.xml 文件里面添加引用

<WizardAction id="user_terms_of_service"wizard:script="android.resource://com.xxxx.gmssampleintegrationsoverlay/raw/wizard_script_customize_flow">
</WizardAction>

注意这里的 com.xxxx.gmssampleintegrationsoverlay 需要对应上面AndroidManifest.xml package

<!-- Set screen lock options. The action must precede the payments action [RECOMMENDED, CUSTOMIZABLE] --><WizardAction id="lock_screen"wizard:uri="intent:#Intent;action=com.google.android.setupwizard.LOCK_SCREEN;end" ></WizardAction><!-- MY completion [CUSTOMIZABLE] --><WizardAction id="user_terms_of_service"wizard:script="android.resource://com.xxxx.gmssampleintegrationsoverlay/raw/wizard_script_customize_flow"></WizardAction><!-- Labeled end of script (for branching) [RECOMMENDED, CUSTOMIZABLE] --><WizardAction id="END_OF_SCRIPT" />

定义 com.android.setupwizard.USER_TERMS_OF_SERVICE

在项目的 AndroidManifest.xml

<activity android:name=".setupwizard.SetupWFinishActivity"android:exported="true" ><intent-filter><action android:name="com.android.setupwizard.USER_SETUP_FINISH" /><category android:name="android.intent.category.DEFAULT" /></intent-filter></activity>

SetupWFinishActivity.java

package com.android.settings.setupwizard;import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;import com.android.settings.R;public class SetupWFinishActivity extends Activity {public static final String TAG = "SetupWFinishActivity";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);getWindow().setStatusBarColor(Color.WHITE);getWindow().setNavigationBarColor(Color.WHITE);getWindow().setNavigationBarDividerColor(Color.WHITE);getActionBar().hide();setContentView(R.layout.activity_setup_wfinish);findViewById(R.id.button3).setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//: TODO onNext();}});}public void onNext() {int resultCode = Activity.RESULT_OK;Intent intent = WizardManagerHelper.getNextIntent(getIntent(), resultCode);Log.e(TAG, "onNext() intent:" + intent);try {startActivityForResult(intent, Activity.RESULT_OK);} catch (ActivityNotFoundException e) {Log.e(TAG, e.getMessage());}Intent returnIntent = new Intent();setResult(Activity.RESULT_OK,returnIntent);finish();}
}

WizardManagerHelper的实现

static class WizardManagerHelper {private static final String ACTION_NEXT = "com.android.wizard.NEXT";static final String EXTRA_SCRIPT_URI = "scriptUri";static final String EXTRA_ACTION_ID = "actionId";private static final String EXTRA_RESULT_CODE = "com.android.setupwizard.ResultCode";public static final String EXTRA_THEME = "theme";static final String EXTRA_WIZARD_BUNDLE = "wizardBundle";static final String EXTRA_IS_FIRST_RUN = "firstRun";static final String EXTRA_IS_DEFERRED_SETUP = "deferredSetup";static final String EXTRA_IS_PRE_DEFERRED_SETUP = "preDeferredSetup";public static final String EXTRA_IS_SETUP_FLOW = "isSetupFlow";public static Intent getNextIntent(Intent originalIntent, int resultCode) {return getNextIntent(originalIntent, resultCode, null);}public static Intent getNextIntent(Intent originalIntent, int resultCode, Intent data) {Intent intent = new Intent(ACTION_NEXT);copyWizardManagerExtras(originalIntent, intent);intent.putExtra(EXTRA_RESULT_CODE, resultCode);if (data != null && data.getExtras() != null) {intent.putExtras(data.getExtras());}intent.putExtra(EXTRA_THEME, originalIntent.getStringExtra(EXTRA_THEME));return intent;}public static void copyWizardManagerExtras(Intent srcIntent, Intent dstIntent) {dstIntent.putExtra(EXTRA_WIZARD_BUNDLE, srcIntent.getBundleExtra(EXTRA_WIZARD_BUNDLE));for (String key :Arrays.asList(EXTRA_IS_FIRST_RUN,EXTRA_IS_DEFERRED_SETUP,EXTRA_IS_PRE_DEFERRED_SETUP,EXTRA_IS_SETUP_FLOW)) {dstIntent.putExtra(key, srcIntent.getBooleanExtra(key, false));}for (String key : Arrays.asList(EXTRA_THEME, EXTRA_SCRIPT_URI, EXTRA_ACTION_ID)) {dstIntent.putExtra(key, srcIntent.getStringExtra(key));}}}

相关文章:

Android Google 开机向导定制 setup wizard

Android 开机向导定制 采用 rro_overlays 机制来定制开机向导&#xff0c;定制文件如下&#xff1a; GmsSampleIntegrationOverlay$ tree . ├── Android.bp ├── AndroidManifest.xml └── res └── raw ├── wizard_script_common_flow.xml ├── wizard_script…...

OpenEL GS之深入解析视频图像处理中怎么实现错帧同步

一、什么是错帧同步? 现在移动设备的系统相机的最高帧率在 120 FPS 左右,当帧率低于 20 FPS 时,用户可以明显感觉到相机画面卡顿和延迟。我们在做相机预览和视频流处理时,对每帧图像处理时间过长(超过 30 ms)就很容易造成画面卡顿,这个场景就需要用到错帧同步方法去提升…...

MyBatis处理LIKE查询时,如何将传值中包含下划线_和百分号%等特殊字符处理成普通字符而不是SQL的单字符通配符

MySQL中&#xff0c;_和%在LIKE模糊匹配中有特殊的含义&#xff1a; 下划线 _ 在LIKE模糊匹配中表示匹配任意单个字符。百分号 % 在LIKE模糊匹配中表示匹配任意多个字符&#xff08;包括零个字符&#xff09; 如果这种字符不经过处理&#xff0c;并且你的模糊查询sql语句书写…...

Spring MVC(三) 国际化

SpringMVC 国际化 1、添加相关依赖2、配置MessageSourceBean方式一&#xff1a;ReloadableResourceBundleMessageSource方式二&#xff1a;ResourceBundleMessageSource 3、添加消息资源文件英文 messages_en.properties中文 messages_zh_CN.properties默认 messages.propertie…...

四款坚固耐用、小尺寸、1EDB9275F、1EDS5663H、1EDN9550B、1EDN7512G单通道栅极驱动器IC

1、1EDB9275F 采用DSO-8 150mil封装的单通道隔离栅极驱动器&#xff08;PG-DSO-8&#xff09; EiceDRIVER™ 1EDB 产品系列 单通道栅极驱动器IC具有3 kVrms的输入输出隔离电压额定值。 栅极驱动器系列具有6/-4 ns传输延迟精度&#xff0c;可针对具有高系统级效率的快速开关应…...

登录页添加验证码

登录页添加验证码 引入验证码页面组件&#xff1a;ValidCode.vue <template><div class"ValidCodeContent" style""><divclass"ValidCode disabled-select":style"width:${width}; height:${height}"click"refre…...

03--数据库连接池

1、数据库连接池 1.1 JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时&#xff0c;传统的模式基本是按以下步骤&#xff1a; 在主程序&#xff08;如servlet、beans&#xff09;中建立数据库连接进行sql操作断开数据库连接 这种模式开发&#xff0c;存在的问题:…...

MySQL表的基本插入查询操作详解

博学而笃志&#xff0c;切问而近思 文章目录 插入插入更新 替换查询全列查询指定列查询查询字段为表达式查询结果指定别名查询结果去重 WHERE 条件基本比较逻辑运算符使用LIKE进行模糊匹配使用IN进行多个值匹配 排序筛选分页结果更新数据删除数据截断表聚合函数COUNTSUMAVGMAXM…...

『 C++ 』红黑树RBTree详解 ( 万字 )

文章目录 &#x1f996; 红黑树概念&#x1f996; 红黑树节点的定义&#x1f996; 红黑树的插入&#x1f996; 数据插入后的调整&#x1f995; 情况一:ucnle存在且为红&#x1f995; 情况二:uncle不存在或uncle存在且为黑&#x1f995; 插入函数代码段(参考)&#x1f995; 旋转…...

c# 人脸识别的思路

在C#中实现人脸识别&#xff0c;您可以使用诸如虹软ArcFace等第三方人脸识别SDK。以下是一个基于虹软ArcFace SDK的C#人脸识别示例的大致步骤&#xff1a; 安装与引用SDK&#xff1a; 首先&#xff0c;您需要从虹软官网下载适用于C#的ArcFace人脸识别SDK&#xff0c;并将其安装…...

如何用AI提高论文阅读效率?

已经2024年了&#xff0c;该出现一个写论文解读AI Agent了。 大家肯定也在经常刷论文吧。 但真正尝试过用GPT去刷论文、写论文解读的小伙伴&#xff0c;一定深有体验——费劲。其他agents也没有能搞定的&#xff0c;今天我发现了一个超级厉害的写论文解读的agent &#xff0c…...

文件重命名方法:不同路径的文件名大小写如何批量转换技巧

在文件管理中&#xff0c;经常要处理文件重命名的问题&#xff0c;尤其是涉及到不同路径下的文件名大小写转换时。下面来看云炫文件管理器如何批量转换文件名的大小写的技巧&#xff0c;轻松完成这项任务。 准备多个不同路径文件夹&#xff0c;在里面各放几个文件。接下来开始…...

深度学习中的最优化算法是什么?

在深度学习中&#xff0c;最优化算法主要用于调整神经网络的参数&#xff08;如权重和偏差&#xff09;&#xff0c;以最小化或最大化某个目标函数&#xff08;通常是损失函数&#xff09;。这些算法对于训练高效、准确的深度学习模型至关重要。以下是几种在深度学习中常用的最…...

SQL执行时间过长如何优化

这个问题&#xff0c;其实跟慢 SQl 排查解决有点像。可以从以下这几个方面入手&#xff1a; 确定瓶颈 首先查看 MySQL 日志、慢查询日志、explain 分析 SQL 的执行计划、profile 分析执行耗时、Optimizer Trace分析详情等操作&#xff0c;确定查询执行的瓶颈在哪里。只有确定…...

局部阈值 local_threshold

Currently the operator offers only the Method adapted_std_deviation. This algorithm is a text binarization technique and provides good results for document images. 目前这个算子只提供adapted_std_deviation方法&#xff0c;这个算子是一个文本二值化技术&#xf…...

【C/C++】C语言的高级编程(内存分区,指针)

C语言的高级编程【内存&#xff0c;指针】 基本知识变量gcc size工具 内存分区指针相关定义和赋值指针加法函数指针多级指针数组指针传参 基本知识 变量 变量解释全局变量出现在代码块{}之外的变量就是全局变量局部变量一般情况下&#xff0c;代码块{}内部定义的变量就是自动…...

Python ❀ 使用代码实现API接口调用详解

文章目录 1. 工具准备1.1. requests代码包1.2. BurpSuite抓包工具 2. 操作过程2.1. 一个简单的请求2.1.1. Burp获取响应2.1.2. 转发获取响应 2.2. 构造GET类型URL参数2.3. 构造请求头部2.4. 构造POST类型payload数据2.4.1. urlencoded格式2.4.2. json格式 本文主要讲解常用API接…...

关于KT6368A双模蓝牙芯片的BLE在ios的lightblue大数量数据测试

测试简介 关于KT6368A双模蓝牙芯片的BLE在ios的lightblue app大数量数据测试 测试环境&#xff1a;iphone7 。KT6368A双模程序96B6 App&#xff1a;lightblue ios端 可以打开log日志查看通讯流程 测试数据&#xff1a;长度是1224个字节&#xff0c;单次直接发给KT6368A&a…...

云边协同的 RTC 如何助力即构全球实时互动业务实践

作者&#xff1a;即构科技 由 51 CTO 主办的“WOT 全球技术创新大会 2023深圳站”于 11 月 24 日 - 25 日召开&#xff0c;即构科技后台技术总监肖潇以“边缘容器在全球音视频场景的探索与实践”为主题进行分享。 边缘计算作为中心云计算的补充&#xff0c;通过边缘容器架构和…...

使用python连接elasticsearch

有一个困惑了好久的问题&#xff0c;那就是从python里面连接elasticsearch总是报错。大致长这样 一开始我是看网上把es的安全功能关闭&#xff0c;也就是下面的内容&#xff0c;这个要进入到es的docker中去改config/elasticsearch.yml配置文件&#xff0c;但是这样改了以后kib…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中&#xff0c;我们已经大致实现了rpc服务端的各项功能代…...

剑指offer20_链表中环的入口节点

链表中环的入口节点 给定一个链表&#xff0c;若其中包含环&#xff0c;则输出环的入口节点。 若其中不包含环&#xff0c;则输出null。 数据范围 节点 val 值取值范围 [ 1 , 1000 ] [1,1000] [1,1000]。 节点 val 值各不相同。 链表长度 [ 0 , 500 ] [0,500] [0,500]。 …...

数据链路层的主要功能是什么

数据链路层&#xff08;OSI模型第2层&#xff09;的核心功能是在相邻网络节点&#xff08;如交换机、主机&#xff09;间提供可靠的数据帧传输服务&#xff0c;主要职责包括&#xff1a; &#x1f511; 核心功能详解&#xff1a; 帧封装与解封装 封装&#xff1a; 将网络层下发…...

相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)

【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...

使用LangGraph和LangSmith构建多智能体人工智能系统

现在&#xff0c;通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战&#xff0c;比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...

纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join

纯 Java 项目&#xff08;非 SpringBoot&#xff09;集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...

python爬虫——气象数据爬取

一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用&#xff1a; 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests&#xff1a;发送 …...