Android 13.0 framework系统首次开机添加锁屏壁纸的功能

#【投稿赢 iPhone 17】「我的第一个开源项目」故事征集:用代码换C位出道!#

1.前言

在13.0的系统rom定制化开发中,在某些时候需要默认设置锁屏壁纸功能,而系统中没有在 framework/base下没有单独的默认锁屏壁纸的图片替换,默认就是锁屏壁纸和主屏幕壁纸 都是同一张壁纸,所以就需要添加接口来实现设置默认锁屏壁纸的功能

2.framework系统首次开机添加锁屏壁纸的功能的核心类

 /packages/apps/WallpaperPicker/src/com/android/wallpaperpicker/tileinfo/DefaultWallpaperInfo.java
 frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java

3.framework系统首次开机添加锁屏壁纸的功能的核心功能分析和实现

系统提供了更多的选项来自定义壁纸。用户不仅可以选择静态图片作为壁纸,还可以选择动态壁纸、视频壁纸等。此外,Android还支持多壁纸功能,允许用户为不同的屏幕设置不同的壁纸。 修改默认壁纸的步骤 打开设置:首先,打开您的Android设备上的“设置”应用。 进入显示设置:在设置菜单中,找到并选择“显示”选项。 选择壁纸:在显示设置中,选择“壁纸”选项。 选择壁纸类型:在壁纸设置中,您可以选择“静态壁纸”、“动态壁纸”或“视频壁纸”等不同类型的壁纸。 选择壁纸图片:选择您喜欢的壁纸图片,然后点击“设置壁纸”按钮。 壁纸管理器,就是android提供的一个专门用于修改桌面背景图片的一个服务,通过这个服务(WallpaperManager)就可以自定义的修改android系统中

<think> 嗯,用户这次提出的问题很聚焦——Android 13.0系统Settings横状态下WiFi扫码功能失效的修复方案。结合站内引用[1]的信息,这显然是个特定场景下的相机预览方向问题。 从用户引用中提到的核心类QrCamera.java和WifiDppQrCodeScannerFragment.java来看,需要重点关注相机预览方向的处理逻辑。用户是Android定制化开发者,能准确提供类路径,说明具备相当的开发经验,应该不需要过多基础概念解释。 横竖切换时Android系统会销毁重建Activity,扫码功能失效可能涉及两个关键点:一是相机预览方向未根据幕旋转动态调整,导致图像识别算法无法解析;二是SurfaceView尺寸变化后未重新计算扫码区域。引用[1]提到竖正常唯横异常,基本可以排除二维码解析库本身的问题。 修复的核心思路应该是:在QrCamera类中加强幕方向监听,当横时主动调整相机预览方向为90度或270度(取决于设备自然方向)。具体需要检查setDisplayOrientation()方法的调用逻辑,可能当前仅考虑了竖状态的值。 考虑到用户需要即时可用的代码方案,准备在回答中提供WifiDppQrCodeScannerFragment的核心修改示例。特别要注意getRotationDegrees()方法的实现,因为不同设备的自然朝向可能有差异(手机默认竖,平板可能默认横)。另外补充说明AndroidManifest.xml配置要点,有些开发者会忽略这个前置条件。 用户没有提及具体设备型号,所以需要强调设备兼容性处理。最后建议增加日志输出rotationDegrees的值,这对验证修复效果很重要——毕竟在模拟器上横竖测试可能和真机表现不同。 相关问题设计要延伸这个场景:二维码扫描优化方向(比如旋转识别)、配置变更处理的其他方案(configChanges),这些都是开发者后续可能遇到的关联问题。用户既然在做系统定制化,应该对性能优化类话题也有需求。 </think> 根据引用[^1]的分析,修复Android 13.0WiFi扫码失效的核心是调整**相机预览方向**和**扫码区域计算**,具体步骤如下: --- ### 修复方案 #### 1. 修改相机预览方向 (`QrCamera.java`) ```java // 在 initCamera() 方法中添加检测 private void initCamera() { ... int rotation = getDisplay().getRotation(); int degrees = 0; switch (rotation) { case Surface.ROTATION_0: degrees = 0; break; case Surface.ROTATION_90: degrees = 90; break; // 横右转 case Surface.ROTATION_270: degrees = 270; break; // 横左转 } mCamera.setDisplayOrientation(degrees); // 关键修复:动态设置预览方向 ... } ``` #### 2. 修正扫码区域计算 (`WifiDppQrCodeScannerFragment.java`) ```java // 重写 onPreviewSizeChosen() 方法 @Override public void onPreviewSizeChosen() { ... // 横时交换宽高值 if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE) { int temp = previewWidth; previewWidth = previewHeight; previewHeight = temp; } // 重新计算扫码框坐标(示例) mScanRect.left = (previewWidth - scanFrameSize) / 2; mScanRect.top = (previewHeight - scanFrameSize) / 2; ... } ``` #### 3. 声明横支持 (`AndroidManifest.xml`) ```xml <activity android:name=".wifi.dpp.WifiDppConfiguratorActivity" android:screenOrientation="fullSensor" /> <!-- 允许所有方向 --> ``` --- ### 关键原理说明 1. **方向适配问题** 横时相机传感器数据未旋转,导致二维码图像倒置,扫码库无法识别[^1]。通过 `setDisplayOrientation()` 动态旋转预览帧解决。 2. **坐标计算错误** 竖预设的扫码区域坐标在横时失效,需根据当前朝向重新计算视野区域。 3. **生命周期处理** `fullSensor` 配置确保横竖切换时Activity自动重建,避免SurfaceView异常。 --- ### 验证步骤 ```bash # 编译后验证流程 adb install -r $OUT/system/product/priv-app/Settings/Settings.apk adb shell am start -n com.android.settings/.wifi.dpp.WifiDppConfiguratorActivity # 切换横测试扫码功能 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安卓兼职framework应用工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值