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

android11为开机动画添加铃声(语音)

一、碰到的问题

1、第一次开机无铃声

2、开机时铃声和动画不同步,开头的铃声会丢失

3、开机时铃声/动画不能完全播放完

二、解决

以下为添加的patch

/开机铃声不同步,语音第一段无声
diff --git a/media/libmediaplayerservice/MediaPlayerService.cpp b/media/libmediaplayerservice/MediaPlayerService.cpp
index b816042b75..2605df5afb 100644
--- a/media/libmediaplayerservice/MediaPlayerService.cpp
+++ b/media/libmediaplayerservice/MediaPlayerService.cpp
@@ -2811,7 +2811,7 @@ MediaPlayerService::BatteryTracker::BatteryTracker() {// reset battery stats// if the mediaserver has crashed, battery stats could be left// in bad state, reset the state upon service start.
-    BatteryNotifier::getInstance().noteResetVideo();
+//    BatteryNotifier::getInstance().noteResetVideo();}void MediaPlayerService::BatteryTracker::addBatteryData(uint32_t params)
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 764fdc33c0..66729b88f6 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -186,7 +186,8 @@ AudioFlinger::AudioFlinger()mGlobalEffectEnableTime(0),mPatchPanel(this),mDeviceEffectManager(this),
-      mSystemReady(false)
+//      mSystemReady(false)
+      mSystemReady(true){// unsigned instead of audio_unique_id_use_t, because ++ operator is unavailable for enumfor (unsigned use = AUDIO_UNIQUE_ID_USE_UNSPECIFIED; use < AUDIO_UNIQUE_ID_USE_MAX; use++) {
diff --git a/services/audioflinger/Threads.cpp b/services/audioflinger/Threads.cpp
index 10404285a9..6ab56e0fd5 100755
--- a/services/audioflinger/Threads.cpp
+++ b/services/audioflinger/Threads.cpp
@@ -580,11 +580,11 @@ status_t AudioFlinger::ThreadBase::sendConfigEvent_l(sp<ConfigEvent>& event){status_t status = NO_ERROR;-    if (event->mRequiresSystemReady && !mSystemReady) {
+/*    if (event->mRequiresSystemReady && !mSystemReady) {event->mWaitStatus = false;mPendingConfigEvents.add(event);return status;
-    }
+    }	*/mConfigEvents.add(event);ALOGV("sendConfigEvent_l() num events %zu event %d", mConfigEvents.size(), event->mType);mWaitWorkCV.signal();
@@ -1021,7 +1021,8 @@ void AudioFlinger::ThreadBase::releaseWakeLock_l()}void AudioFlinger::ThreadBase::getPowerManager_l() {
-    if (mSystemReady && mPowerManager == 0) {
+//    if (mSystemReady && mPowerManager == 0) {
+    if (mSystemReady == 0) {// use checkService() to avoid blocking if power service is not up yetsp<IBinder> binder =defaultServiceManager()->checkService(String16("power"));
@@ -3090,6 +3091,9 @@ ssize_t AudioFlinger::PlaybackThread::threadLoop_write()ssize_t bytesWritten;const size_t offset = mCurrentWriteLength - mBytesRemaining;+    if (mPowerManager == 0)
+	    acquireWakeLock();
+// If an NBAIO sink is present, use it to write the normal mixer's submixif (mNormalSink != 0) {
//初次开机无铃声
@@ -5241,6 +5245,15 @@ AudioFlinger::PlaybackThread::mixer_state AudioFlinger::MixerThread::prepareTractrack->mHasVolumeController = false;}+	    /*wmc modify start */
+            char mvalue[PROPERTY_VALUE_MAX] = { 1 };
+            property_get("service.bootanim.exit", mvalue, "");
+            if (strcmp(mvalue,"0") == 0){
+                vlf = 0.25f;
+                vrf = 0.25f;
+            }
+            /*wmc modify end */
+// XXX: these things DON'T need to be done each timemAudioMixer->setBufferProvider(trackId, track);mAudioMixer->enable(trackId);
//加了开机铃声,开机动画不能播放完
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 6ee60273264c..1aac6251061d 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -3455,8 +3455,10 @@ public class WindowManagerService extends IWindowManager.Stub// stop boot animation// formerly we would just kill the process, but we now ask it to exit so it// can choose where to stop the animation.
-                SystemProperties.set("service.bootanim.exit", "1");
-                mBootAnimationStopped = true;
+//                SystemProperties.set("service.bootanim.exit", "1");
+//                mBootAnimationStopped = true;
+                SystemProperties.set("service.bootanim.exit", "0");
+                mBootAnimationStopped = false;}if (!mForceDisplayEnabled && !checkBootAnimationCompleteLocked()) {

还有,我将bootanimation.zip文件的desc.txt进行了修改,这里添加了延时100ms,如下:

1280 800 20        //宽          高          帧数
p 1 0 part0        //标志性符  循环次数(0表示无限循环)  阶段切换间隔时间  对应目录名
p 0 100 part1

注意,这里的铃声/语音的格式需要为wav,这个音频文件需要和part0的文件一起打包,或者单独建一个part文件,和所需要的图片打包成bootanimation.zip,格式为存储。

相关文章:

android11为开机动画添加铃声(语音)

一、碰到的问题 1、第一次开机无铃声 2、开机时铃声和动画不同步&#xff0c;开头的铃声会丢失 3、开机时铃声/动画不能完全播放完 二、解决 以下为添加的patch /开机铃声不同步&#xff0c;语音第一段无声 diff --git a/media/libmediaplayerservice/MediaPlayerService…...

使用 Akshare 下载国内的期货(主力连续)、股票和指数的历史行情数据

本文介绍如何使用 akshare 下载国内期货、股票和指数的历史行情数据。 Akshare 是一个丰富的金融数据查询的 Python 库&#xff0c;提供了大量的金融数据接口。本文将详细介绍如何使用 Akshare 下载期货、股票和指数数据&#xff0c;并提供完整的代码示例&#xff0c;以求大家…...

【React】Google 账号之个性化一键登录按钮功能

“使用 Google 帐号登录”功能可快速管理网站上的用户身份验证。用户登录 Google 账号、表示同意&#xff0c;并安全地与平台共享其个人基础资料信息。 官方文档&#xff1a;链接 一、获取 Google API 客户端 ID 打开 Google API 控制台 中的凭据页面 创建或选择 Google API 项…...

MySQL已经连接对应数据库,但mapper中表名仍报错

如图所示&#xff0c;已经连接对应数据库但还要在其中选择&#xff0c;表多了一个个选会很麻烦 此时找到下图界面 选中对应数据库应用&#xff0c;项目中所有mapper就能找到对应表啦...

CentOS 7:停止更新后如何下载软件?

引言 CentOS 7 是一个广受欢迎的 Linux 发行版&#xff0c;它为企业和开发者提供了一个稳定、安全、且免费的操作系统环境。然而&#xff0c;随着时间的推移&#xff0c;CentOS 7 的官方支持已经进入了维护阶段&#xff0c;这意味着它将不再收到常规的更新和新功能&#xff0c;…...

MySQL GROUP_CONCAT 函数详解与实战应用

提示&#xff1a;在需要将多个值组合成一个列表时&#xff0c;GROUP_CONCAT() 函数为 MySQL 提供了一种强大的方式来处理数据 文章目录 前言什么是 GROUP_CONCAT()基本语法 示例使用 GROUP_CONCAT()去除重复值排序结果 前言 提示&#xff1a;这里可以添加本文要记录的大概内容…...

MATLAB Gazebo联合仿真

准备仿真环境&#xff1a;在Gazebo中设置仿真场景&#xff0c;包括机器人模型、环境布局、传感器和执行器等。编写MATLAB脚本&#xff1a;在MATLAB中编写控制算法和数据处理脚本&#xff0c;用于接收Gazebo中的传感器数据&#xff0c;并生成控制命令。建立通信&#xff1a;通过…...

Vue3 pdf.js将二进制文件流转成pdf预览

好久没写东西&#xff0c;19年之前写过一篇Vue2将pdf二进制文件流转换成pdf文件&#xff0c;如果Vue2换成Vue3了&#xff0c;顺带来一篇文章&#xff0c;pdf.js这个东西用来解决内网pdf预览&#xff0c;是个不错的选择。 首先去pdfjs官网&#xff0c;下载需要的文件 然后将下载…...

【机器学习】逻辑回归的原理、应用与扩展

文章目录 一、逻辑回归概述二、Sigmoid函数与损失函数2.1 Sigmoid函数2.2 损失函数 三、多分类逻辑回归与优化方法3.1 多分类逻辑回归3.2 优化方法 四、特征离散化 一、逻辑回归概述 逻辑回归是一种常用于分类问题的算法。大家熟悉的线性回归一般形式为 Y a X b \mathbf{Y}…...

Ubuntu22.04系统装好后左上角下划线闪烁不开机(N卡)

折腾了半天以为是ubuntu的系统和硬件不匹配&#xff0c; 最后发现的确有点关系&#xff0c; 就是显卡驱动的问题 解决办法&#xff1a; 1. 进入到safty模式下&#xff0c; 然后配好网络环境 2. 移除所有的驱动相关的包&#xff0c; sudo apt-get remove --purge nvidia* 3.…...

Leetcode刷题4--- 寻找两个正序数组的中位数 Python

目录 题目及分析方法一&#xff1a;直接合并后排序方法二&#xff1a;二分查找法 题目及分析 &#xff08;力扣序号4&#xff1a;[寻找两个正序数组的中位数](https://leetcode.cn/problems/median-of-two-sorted-arrays/description/&#xff09; 给定两个大小分别为 m 和 n …...

springBoot(若依)集成camunda

1、下图为项目结构 2、最外层 pom引入依赖 <properties><!--camunda 标明版本&#xff0c;注意要个自己的Spring 版本匹配&#xff0c;匹配关系自行查询官网--><camunda.version>7.18.0</camunda.version> </properties> 3、common模块引入依赖 …...

【微信小程序知识点】自定义构建npm

在实际开发中&#xff0c;随着项目的功能越来越多&#xff0c;项目越来越复杂&#xff0c;文件目录也变得很繁琐&#xff0c;为了方便进行项目的开发&#xff0c;开发人员通常会对目录结构进行优化调整&#xff0c;例如&#xff1a;将小程序源码放到miniprogram目录下。 &…...

JCR一区 | Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断

JJCR一区 | Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断 目录 JJCR一区 | Matlab实现GAF-PCNN-MATT、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断分类效果格拉姆矩阵图GAF-PCNN-MATTGASF-CNNGADF-CNN 基本介绍程序设计参考资料 分…...

新手教学系列——高效管理MongoDB数据:批量插入与更新的实战技巧

前言 在日常开发中,MongoDB作为一种灵活高效的NoSQL数据库,深受开发者喜爱。然而,如何高效地进行数据的批量插入和更新,却常常让人头疼。今天,我们将一起探讨如何使用MongoDB的bulk_write方法,简化我们的数据管理流程,让代码更加简洁高效。 常规做法:find、insertone…...

C# Winform 自定义事件实战

在C#的WinForms中&#xff0c;自定义事件是一种强大的工具&#xff0c;它允许你创建自己的事件&#xff0c;从而在特定条件下通知订阅者。自定义事件通常用于封装业务逻辑&#xff0c;使代码更加模块化和易于维护。下面我将通过一个实战例子来展示如何在WinForms中创建和使用自…...

Python通过继承实现多线程

本套课在线学习视频&#xff08;网盘地址&#xff0c;保存到网盘即可免费观看&#xff09;&#xff1a; ​​https://pan.quark.cn/s/677661ea63b3​​ 本节将介绍如何利用Python中的thread模块和threading模块实现多线程&#xff0c;并通过继承threading.Thread类并重写run方…...

记一次项目经历

一、项目需求 1、设备四个工位&#xff0c;每个工位需要测试产品的电参数&#xff1b; 2、每个另外加四个位置温度&#xff1b; 3、显示4个通道电流曲线&#xff0c;16个通道温度曲线&#xff1b; 4、可切换工艺参数&#xff1b; 5、常规判定&#xff0c;测试数据保存到表格内&…...

Elasticsearch 8 支持别名查询

在 Elasticsearch 8 中&#xff0c;使用 Java 高级 REST 客户端进行别名管理的过程与之前的版本类似&#xff0c;但有一些API细节上的变化。以下是如何使用 Java 和 Elasticsearch 8 进行别名操作的例子&#xff1a; 引入依赖 确保你的项目中包含了 Elasticsearch 的高级 RES…...

【Spring Cloud】 使用Eureka实现服务注册与服务发现

文章目录 &#x1f343;前言&#x1f38d;解决方案&#x1f6a9;关于注册中⼼&#x1f6a9;CAP理论&#x1f6a9;常见的注册中心 &#x1f384;Eureka&#x1f6a9;搭建 Eureka Server&#x1f388;创建Eureka-server ⼦模块&#x1f388;引入依赖&#x1f388;项目构建插件&am…...

ssm+java2026年毕设数据分析教学网站【源码+论文】

本系统&#xff08;程序源码&#xff09;带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、选题背景关于会议管理问题的研究&#xff0c;现有研究主要以传统OA办公系统或通用协同办公平台为主&#xff0c;专门针对会议全生命周期…...

ESP32Cam与YOLOv3构建边缘图像识别系统

1. 项目概述&#xff1a;ESP32CamYOLOv3图像识别系统这个项目构建了一个完整的嵌入式图像识别系统&#xff0c;核心由ESP32Cam模块和YOLOv3算法组成。作为一名长期从事嵌入式视觉开发的工程师&#xff0c;我认为这种组合是目前性价比最高的边缘计算视觉方案之一。ESP32Cam模块集…...

STM32+FreeRTOS双分区开发避坑指南:Bootloader跳转前别忘了这行关键代码

STM32FreeRTOS双分区开发避坑指南&#xff1a;Bootloader跳转前别忘了这行关键代码 当你在STM32上实现BootloaderApp双分区架构时&#xff0c;是否遇到过这样的场景&#xff1a;Bootloader明明成功跳转到了应用程序&#xff0c;却在启动FreeRTOS调度器时突然崩溃&#xff1f;寄…...

HarmonyOS6 半年磨一剑 - RcCheckbox 组件事件体系与交互逻辑

文章目录前言一、点击处理链1.1 核心点击处理函数1.2 两个点击入口二、三事件分层设计2.1 三个事件的对比2.2 事件使用示例三、labelDisabled 局部禁止机制3.1 设计意图3.2 适用场景四、RcCheckboxGroup 的数量限制拦截4.1 min/max 拦截机制4.2 数量限制示例总结前言 一个看似…...

如何突破微信设备限制?WeChatPad带来的多设备协同新体验

如何突破微信设备限制&#xff1f;WeChatPad带来的多设备协同新体验 【免费下载链接】WeChatPad 强制使用微信平板模式 项目地址: https://gitcode.com/gh_mirrors/we/WeChatPad 问题引入&#xff1a;微信生态的设备枷锁 当代数字生活中&#xff0c;微信已成为不可或缺…...

Agent-S实战指南:突破性智能体框架如何实现72.6%人类级计算机交互性能

Agent-S实战指南&#xff1a;突破性智能体框架如何实现72.6%人类级计算机交互性能 【免费下载链接】Agent-S Agent S: an open agentic framework that uses computers like a human 项目地址: https://gitcode.com/GitHub_Trending/ag/Agent-S 在人工智能与计算机交互的…...

从零到一:基于LLaMA-Factory与Ollama的本地大模型定制化实战

1. 为什么需要本地定制化大模型&#xff1f; 最近两年&#xff0c;大语言模型的发展速度简直让人瞠目结舌。从最初的GPT-3到现在的Llama 3&#xff0c;模型能力越来越强&#xff0c;但随之而来的问题是&#xff1a;这些通用大模型真的能满足我们每个人的特定需求吗&#xff1f;…...

别再让LVGL卡顿了!手把手教你用思澈SDK的menuconfig优化framebuffer配置,帧率翻倍

别再让LVGL卡顿了&#xff01;手把手教你用思澈SDK的menuconfig优化framebuffer配置&#xff0c;帧率翻倍 嵌入式UI开发中&#xff0c;LVGL的流畅度直接影响用户体验。许多开发者在使用思澈SDK时&#xff0c;常遇到界面卡顿、帧率低的问题。本文将深入分析framebuffer配置对性能…...

从权重计分到算杀引擎:五子棋AI核心算法实战解析

1. 五子棋AI的算法演进&#xff1a;从基础评分到算杀引擎 五子棋作为一款经典策略游戏&#xff0c;其AI算法的核心在于如何评估棋盘局势并做出最优决策。早期AI主要依赖简单的评分机制&#xff0c;比如给不同的棋形&#xff08;活二、活三、冲四等&#xff09;赋予固定分值&…...

零售行业自动化解决方案选型,核心看这几点:企业级智能体架构与落地实测分析

当前&#xff0c;零售行业正处于从“信息化”向“智能化”跨越的关键拐点。 面对全渠道运营的复杂性、劳动力成本的持续攀升以及消费者对交付时效的极致追求&#xff0c; 自动化解决方案已成为零售企业降本增效的核心战略工具。 然而&#xff0c;市场中各类技术路径分化严重&am…...