Android 13 GMS 内置壁纸

如图,原生系统上,设备上的壁纸 显示系统内置壁纸。如果没有添加内置壁纸,就显示默认的壁纸。点击进去就是预览页面
扩展下,默认壁纸在
frameworks/base/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png
frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.png
frameworks/base/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png
添加默认壁纸,追溯下代码。
1.ThemePicker
当前页面是 com.android.wallpaper/.picker.CustomizationPickerActivity ,对应源码 packages/apps/ThemePicker 。
但是在此目录下找不到 CustomizationPickerActivity 。
查看 packages/apps/ThemePicker/Android.bp ,
java_defaults {name: "ThemePicker_defaults",static_libs: ["guava","monet","renderscript_toolkit","wallpaper-common-deps","SettingsLibSettingsTheme","SystemUI-statsd","styleprotoslite","androidx.lifecycle_lifecycle-livedata-ktx","androidx.lifecycle_lifecycle-runtime-ktx","androidx.lifecycle_lifecycle-viewmodel-ktx","androidx.recyclerview_recyclerview","SystemUICustomizationLib",],jni_libs: ["librenderscript-toolkit",],srcs: [":WallpaperPicker2_srcs",":ThemePicker_srcs",":ThemePicker_src_overrides",],use_embedded_native_libs: true,resource_zips: [":WallpaperPicker2_res", ":ThemePicker_res", ":ThemePicker_res_overrides"],optimize: {enabled: false,},kotlincflags: ["-Xjvm-default=enable"],certificate: "",privileged: true,system_ext_specific: true,
}//
// Build app code.
//
android_app {name: "ThemePicker",defaults: ["ThemePicker_defaults"],platform_apis: true,manifest: "AndroidManifest.xml",additional_manifests: [":WallpaperPicker2_Manifest"],overrides: ["WallpaperPicker2"],
}
ThemePicker 引用了 WallpaperPicker2,在 WallpaperPicker2 里找到了 CustomizationPickerActivity 。
2.WallpaperPicker2
找到 DefaultCategoryProvider.java ,
/*** AsyncTask subclass used for fetching all the categories and pushing them one at a time to* the receiver.*/protected static class FetchCategoriesTask extends AsyncTask<Void, Category, Void> {private CategoryReceiver mReceiver;private PartnerProvider mPartnerProvider;protected final Context mAppContext;public FetchCategoriesTask(CategoryReceiver receiver, Context context) {mReceiver = receiver;mAppContext = context.getApplicationContext();}@Overrideprotected Void doInBackground(Void... voids) {mPartnerProvider = InjectorProvider.getInjector().getPartnerProvider(mAppContext);// "My photos" wallpapersandroid.util.Log.d("luoah", "[DefaultCategoryProvider] doInBackground ,My photos wallpapers");publishProgress(getMyPhotosCategory());android.util.Log.d("luoah", "[DefaultCategoryProvider] doInBackground ,publishDeviceCategories");publishDeviceCategories();// Legacy On-device wallpapers. Only show if on mobile.android.util.Log.d("luoah", "[DefaultCategoryProvider] doInBackground ,getOnDeviceCategory");publishProgress(getOnDeviceCategory());// Live wallpapers -- if the device supports them.if (mAppContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LIVE_WALLPAPER)) { List<WallpaperInfo> liveWallpapers = LiveWallpaperInfo.getAll(mAppContext, getExcludedLiveWallpaperPackageNames());android.util.Log.d("luoah", "[DefaultCategoryProvider] doInBackground ,liveWallpapers.size():"+liveWallpapers.size());if (liveWallpapers.size() > 0) {publishProgress(new ThirdPartyLiveWallpaperCategory(mAppContext.getString(R.string.live_wallpapers_category_title),mAppContext.getString(R.string.live_wallpaper_collection_id),liveWallpapers,PRIORITY_LIVE,getExcludedLiveWallpaperPackageNames()));}}// Third party apps.android.util.Log.d("luoah", "[DefaultCategoryProvider] doInBackground ,Third party apps");List<ThirdPartyAppCategory> thirdPartyApps = ThirdPartyAppCategory.getAll(mAppContext, PRIORITY_THIRD_PARTY, getExcludedThirdPartyPackageNames());for (ThirdPartyAppCategory thirdPartyApp : thirdPartyApps) {publishProgress(thirdPartyApp);}return null;}
2.1 图库上的壁纸
2.2 设备上的壁纸
packages/apps/WallpaperPicker2/src/com/android/wallpaper/module/DefaultCategoryProvider.java
getOnDeviceCategory 方法,
/*** Returns a category which incorporates both GEL and bundled wallpapers.*/protected Category getOnDeviceCategory() {android.util.Log.d("luoah", "[DefaultCategoryProvider] getOnDeviceCategory");try {throw new Exception("luoah_getOnDeviceCategory");} catch (Exception e) {e.printStackTrace();}List<WallpaperInfo> onDeviceWallpapers = new ArrayList<>();if (!mPartnerProvider.shouldHideDefaultWallpaper()) {DefaultWallpaperInfo defaultWallpaperInfo = new DefaultWallpaperInfo();onDeviceWallpapers.add(defaultWallpaperInfo);}List<WallpaperInfo> partnerWallpaperInfos = PartnerWallpaperInfo.getAll(mAppContext);onDeviceWallpapers.addAll(partnerWallpaperInfos);List<WallpaperInfo> legacyPartnerWallpaperInfos = LegacyPartnerWallpaperInfo.getAll(mAppContext);onDeviceWallpapers.addAll(legacyPartnerWallpaperInfos);List<WallpaperInfo> privateWallpapers = getPrivateDeviceWallpapers();if (privateWallpapers != null) {onDeviceWallpapers.addAll(privateWallpapers);}return onDeviceWallpapers.isEmpty() ? null : new WallpaperCategory(mAppContext.getString(R.string.on_device_wallpapers_category_title),mAppContext.getString(R.string.on_device_wallpaper_collection_id),onDeviceWallpapers,PRIORITY_ON_DEVICE);}
packages/apps/WallpaperPicker2/src/com/android/wallpaper/model/PartnerWallpaperInfo.java ,
/*** @param ctx* @return All partner wallpapers found on the device.*/public static List<WallpaperInfo> getAll(Context ctx) {PartnerProvider partnerProvider = InjectorProvider.getInjector().getPartnerProvider(ctx);List<WallpaperInfo> wallpaperInfos = new ArrayList<>();final Resources partnerRes = partnerProvider.getResources();final String packageName = partnerProvider.getPackageName();if (partnerRes == null) {return wallpaperInfos;}final int resId = partnerRes.getIdentifier(PartnerProvider.LEGACY_WALLPAPER_RES_ID, "array",packageName);android.util.Log.d("luoah", "[PartnerWallpaperInfo] getAll , packageName:"+packageName+" , resId:"+resId);// Certain partner configurations don't have wallpapers provided, so need to check; return// early if they are missing.if (resId == 0) {return wallpaperInfos;}final String[] extras = partnerRes.getStringArray(resId);for (String extra : extras) {int wpResId = partnerRes.getIdentifier(extra, "drawable", packageName);android.util.Log.d("luoah", "[PartnerWallpaperInfo] getAll , wpResId:"+wpResId);if (wpResId != 0) {final int thumbRes = partnerRes.getIdentifier(extra + "_small", "drawable", packageName);if (thumbRes != 0) {final int fullRes = partnerRes.getIdentifier(extra, "drawable", packageName);android.util.Log.d("luoah", "[PartnerWallpaperInfo] extras in , thumbRes:"+thumbRes);WallpaperInfo wallpaperInfo = new PartnerWallpaperInfo(thumbRes, fullRes);wallpaperInfos.add(wallpaperInfo);}} else {Log.e("PartnerWallpaperInfo", "Couldn't find wallpaper " + extra);}}return wallpaperInfos;}
加打印,机器上 packageName 是 com.google.android.gmsintegration , 即 vendor/partner_gms/apps/GmsSampleIntegration 。
结合源码分析,在 GmsSampleIntegration 应用里加一组数组,数组元素是壁纸图片名称,
- 添加
res/values/arrays.xml
<resources><string-array name="partner_wallpapers" translatable="false"><item>wallpaper_01</item><item>wallpaper_02</item><item>wallpaper_03</item><item>wallpaper_04</item><item>wallpaper_05</item><item>wallpaper_06</item>
</string-array>
- 在
res_dhs_full/drawable/目录放入壁纸,同时存放 *_small.jpg ,
wallpaper_01.jpg
wallpaper_01_small.jpg
wallpaper_02.jpg
wallpaper_02_small.jpg
wallpaper_03.jpg
wallpaper_03_small.jpg
wallpaper_04.jpg
wallpaper_04_small.jpg
wallpaper_05.jpg
wallpaper_05_small.jpg
wallpaper_06.jpg
wallpaper_06_small.jpg
替换后的效果,点击进去显示选择图片,选择图片后是预览页面,

2.3 动态壁纸
2.4 三方应用的壁纸
相关文章:
Android 13 GMS 内置壁纸
如图,原生系统上,设备上的壁纸 显示系统内置壁纸。如果没有添加内置壁纸,就显示默认的壁纸。点击进去就是预览页面 扩展下,默认壁纸在 frameworks/base/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png frameworks/b…...
【LeetCode】234. 回文链表
回文链表 题目描述: 给你一个单链表的头节点 head ,请你判断该链表是否为回文链表。如果是,返回 true ;否则,返回 false 。 示例 1: 输入:head [1,2,2,1] 输出:true示例 2&#…...
零基础学会机器学习,到底要多久?
这两天啊,有不少朋友和我说,想学机器学习,但是之前没有基础,不知道能不能学得会。 首先说结论,只要坚持,就能学会,但是一定不能三天打鱼两天晒网,要持之以恒,至少每隔两…...
视频汇聚/安防监控综合平台EasyCVR接入海康私有协议EHOME显示失败是什么原因?
安防监控/视频综合管理平台/视频集中存储/磁盘阵列EasyCVR视频汇聚平台,支持多种视频格式和编码方式(H.264/H.265),能够轻松对接各类前端监控设备,实现视频流的统一接入与集中管理。安防监控EasyCVR平台支持多种流媒体…...
Qt解析XML
背景 本来想解析VS的项目配置文件(*.vcxproj),配合cppclean来发现多余的#incldue。 结果发现低估了难度,VS会间接引入许多目录。 略有不甘,暂且作为一个解析XML文件的示例。 代码 VSProjectParser.h #include <QVector> #include…...
PwnLab: init-文件包含、shell反弹、提权--靶机渗透思路讲解
Vulnhub靶机链接回【PwnLab】 首页有一个登录框 image-20240807124822770 他没有验证码,我们试试暴力破解 image-20240807122743025 开始爆破了,全部失败,哈哈哈 image-20240807122851001 nmap全端口扫描试试 image-20240807131408315 有…...
OpenCV—二值化Threshold()、adaptiveThreshold()
cv2.threshold() c:double cv::threshold ( InputArray src, OutputArray dst, double thresh, double maxval, int type ) (注:源图片, 目标图, 阈值, 填充色, 阈值类型) python:cv.threshold(src,thresh, maxval, type[, dst]) src:源图片…...
第二天:java面向对象编程(OOP)
第二天:java面向对象编程(OOP) 1. 深入理解OOP四大特性 封装(Encapsulation):学习如何将数据(属性)和操作数据的方法(行为)组合成一个独立的单元࿰…...
Selenium + Python 自动化测试07(滑块的操作方法)
我们的目标是:按照这一套资料学习下来,大家可以独立完成自动化测试的任务。 本篇文章主要讲述如何操作滑块。 目前很多系统登录或者注册的页面都有滑块相关的验证,selenium 中对滑块的基本操作采用了元素的拖曳的方式。需要用到Actiochains模…...
三防平板满足多样化定制为工业领域打造硬件解决方案
在当今工业领域,数字化、智能化的发展趋势日益显著,对于高效、可靠且适应各种复杂环境的硬件设备需求不断增长。三防平板作为一种具有坚固耐用、防水防尘防摔特性的工业级设备,正以其出色的性能和多样化的定制能力,为不同行业的应…...
pytorch,用lenet5识别cifar10数据集(训练+测试+单张图片识别)
目录 LeNet-5 LeNet-5 结构 CIFAR-10 pytorch实现 lenet模型 训练模型 1.导入数据 2.训练模型 3.测试模型 测试单张图片 代码 运行结果 LeNet-5 LeNet-5 是由 Yann LeCun 等人在 1998 年提出的一种经典卷积神经网络(CNN)模型,主要…...
Word卡顿的处理方法
1. 检查和关闭后台程序 关闭不必要的后台程序,释放系统资源。使用任务管理器(Ctrl + Shift + Esc)查看占用CPU和内存较高的应用,并关闭它们。2. 更新Microsoft Office 确保你的Microsoft Office软件是最新版本。新版本通常修复了已知的性能问题。打开Word,点击文件 > 账…...
在 Linux上常见的10大压缩格式解压命令和它们对应的压缩格式
文章目录 前言一、解压 .zip 文件二、解压 .tar.gz 或 .tgz 文件三、解压 .tar 文件四、解压 .tar.bz2 文件五、解压 .tar.xz 文件六、解压 .gz 文件七、解压 .bz2 文件八、解压 .xz 文件九、解压 .7z 文件十、解压 .rar 文件总结 前言 Linux 命令可以解压不同格式的压缩文件。…...
【数据结构】三、栈和队列:6.链队列、双端队列、队列的应用(树的层次遍历、广度优先BFS、先来先服务FCFS)
文章目录 2.链队列2.1初始化(带头结点)不带头结点 2.2入队(带头结点)2.3出队(带头结点)❗2.4链队列c实例 3.双端队列考点:输出序列合法性栈双端队列 队列的应用1.树的层次遍历2.图的广度优先遍历3.操作系统…...
技术速递|使用 Native Library Interop 为 .NET MAUI 创建绑定
作者:Rachel Kang 排版:Alan Wang 在当今的应用开发领域,通过利用本机功能来扩展 .NET 应用程序的能力非常宝贵。.NET MAUI 处理程序架构使开发人员能够使用 .NET 代码直接操作本机控件,甚至允许无缝创建跨平台自定义控件。然而&a…...
Linux笔记 --- 标准IO
系统IO的最大特点一个是更具通用性,不管是普通文件、管道文件、设备节点文件、接字文件等等都可以使用,另一个是他的简约性,对文件内数据的读写在任何情况下都是带任何格式的,而且数据的读写也都没有经过任何缓冲处理,…...
洛谷:B3625 迷宫寻路
迷宫寻路 题目描述 机器猫被困在一个矩形迷宫里。 迷宫可以视为一个 n m n\times m nm 矩阵,每个位置要么是空地,要么是墙。机器猫只能从一个空地走到其上、下、左、右的空地。 机器猫初始时位于 ( 1 , 1 ) (1, 1) (1,1) 的位置,问能否…...
【C#】explicit、implicit与operator
字面解释 explicit:清楚明白的;易于理解的;(说话)清晰的,明确的;直言的;坦率的;直截了当的;不隐晦的;不含糊的。 implicit:含蓄的;不直接言明的;成为一部分的;内含的;完全的;无疑问的。 operator:操作人员;技工;电话员;接线员;…...
Vue:Vuex-Store使用指南
一、简介 1.1Vuex 是什么 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension (opens new window)…...
对经典动态规划问题【爬台阶】的一些思考
背景 今天在做Leetcode题目时,做到了一道经典的动态规划问题:爬楼梯,题目的大致意思很简单,有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上…...
相机Camera日志分析之三十一:高通Camx HAL十种流程基础分析关键字汇总(后续持续更新中)
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了:有对最普通的场景进行各个日志注释讲解,但相机场景太多,日志差异也巨大。后面将展示各种场景下的日志。 通过notepad++打开场景下的日志,通过下列分类关键字搜索,即可清晰的分析不同场景的相机运行流程差异…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
使用LangGraph和LangSmith构建多智能体人工智能系统
现在,通过组合几个较小的子智能体来创建一个强大的人工智能智能体正成为一种趋势。但这也带来了一些挑战,比如减少幻觉、管理对话流程、在测试期间留意智能体的工作方式、允许人工介入以及评估其性能。你需要进行大量的反复试验。 在这篇博客〔原作者&a…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 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、…...
2025年渗透测试面试题总结-腾讯[实习]科恩实验室-安全工程师(题目+回答)
安全领域各种资源,学习文档,以及工具分享、前沿信息分享、POC、EXP分享。不定期分享各种好玩的项目及好用的工具,欢迎关注。 目录 腾讯[实习]科恩实验室-安全工程师 一、网络与协议 1. TCP三次握手 2. SYN扫描原理 3. HTTPS证书机制 二…...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
Docker拉取MySQL后数据库连接失败的解决方案
在使用Docker部署MySQL时,拉取并启动容器后,有时可能会遇到数据库连接失败的问题。这种问题可能由多种原因导致,包括配置错误、网络设置问题、权限问题等。本文将分析可能的原因,并提供解决方案。 一、确认MySQL容器的运行状态 …...
用鸿蒙HarmonyOS5实现中国象棋小游戏的过程
下面是一个基于鸿蒙OS (HarmonyOS) 的中国象棋小游戏的实现代码。这个实现使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chinesechess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├──…...
