android 11 添加开机铃声
需求:在11.0在定制化系统中,默认是没有开机铃声的,有客户提出需要要添加开机铃声,所以为了完成需求,就来实现这一个功能关于开机铃声 都是在bootanimation_main.cpp 这里面负责管理。
添加添加开机铃声的核心类
frameworks\base\cmds\bootanimation\bootanimation_main.cpp
frameworks\base\cmds\bootanimation\BootAnimation.cpp
添加开机铃声的核心功能分析和实现
2.1 bootanimation_main.cpp开机动画处理分析
frameworks\base\cmds\bootanimation\bootanimation_main.cpp
int main()
{
setpriority(PRIO_PROCESS, 0, ANDROID_PRIORITY_DISPLAY);
bool noBootAnimation = bootAnimationDisabled();
ALOGI_IF(noBootAnimation, "boot animation disabled");
if (!noBootAnimation) {sp<ProcessState> proc(ProcessState::self());ProcessState::self()->startThreadPool();// create the boot animation object (may take up to 200ms for 2MB zip)#ifdef BOOTANIMATION_EXT
sp<BootAnimation> boot = new BootAnimation(audioplay::createAnimationCallbacks(),true);
#else
sp<BootAnimation> boot = new BootAnimation(audioplay::createAnimationCallbacks());
#endif
waitForSurfaceFlinger();boot->run("BootAnimation", PRIORITY_DISPLAY);ALOGV("Boot animation set up. Joining pool.");IPCThreadState::self()->joinThreadPool();
}
return 0;}
从代码中可以看到 是由BootAnimation来处理 开机铃声
frameworks\base\cmds\bootanimation\BootAnimation.cpp
static const char OEM_BOOTSOUND_FILE[] = "/oem/media/bootsound.mp3";
static const char PRODUCT_BOOTSOUND_FILE[] = "/product/media/bootsound.mp3";
static const char SYSTEM_BOOTSOUND_FILE[] = "/system/media/bootsound.mp3";
static const char OEM_SHUTDOWNSOUND_FILE[] = "/oem/media/shutdownsound.mp3";
static const char PRODUCT_SHUTDOWNSOUND_FILE[] = "/product/media/shutdownsound.mp3";
static const char SYSTEM_SHUTDOWNSOUND_FILE[] = "/system/media/shutdownsound.mp3";
void BootAnimation::findBootAnimationFile() {
// If the device has encryption turned on or is in process
// of being encrypted we show the encrypted boot animation.
char decrypt[PROPERTY_VALUE_MAX];
property_get("vold.decrypt", decrypt, "");
bool encryptedAnimation = atoi(decrypt) != 0 ||!strcmp("trigger_restart_min_framework", decrypt);if (!mShuttingDown && encryptedAnimation) {static const char* encryptedBootFiles[] ={PRODUCT_ENCRYPTED_BOOTANIMATION_FILE, SYSTEM_ENCRYPTED_BOOTANIMATION_FILE};for (const char* f : encryptedBootFiles) {if (access(f, R_OK) == 0) {mZipFileName = f;return;}}
}const bool playDarkAnim = android::base::GetIntProperty("ro.boot.theme", 0) == 1;
static const char* bootFiles[] ={APEX_BOOTANIMATION_FILE, playDarkAnim ? PRODUCT_BOOTANIMATION_DARK_FILE : PRODUCT_BOOTANIMATION_FILE,OEM_BOOTANIMATION_FILE, SYSTEM_BOOTANIMATION_FILE};
static const char* shutdownFiles[] ={PRODUCT_SHUTDOWNANIMATION_FILE, OEM_SHUTDOWNANIMATION_FILE, SYSTEM_SHUTDOWNANIMATION_FILE, ""};for (const char* f : (!mShuttingDown ? bootFiles : shutdownFiles)) {if (access(f, R_OK) == 0) {mZipFileName = f;#ifdef BOOTANIMATION_EXT
break;
#else
return;
#endif
}
}
#ifdef BOOTANIMATION_EXT
static const char* bootSoundFiles[] =
{PRODUCT_BOOTSOUND_FILE, OEM_BOOTSOUND_FILE, SYSTEM_BOOTSOUND_FILE};
static const char* shutdownSoundFiles[] =
{PRODUCT_SHUTDOWNSOUND_FILE, OEM_SHUTDOWNSOUND_FILE, SYSTEM_SHUTDOWNSOUND_FILE};
for (const char* f : (!mShuttingDown ? bootSoundFiles : shutdownSoundFiles)) {
if (access(f, R_OK) == 0) {
mSoundFileName = f;
SLOGD("mSoundFileName string is %s,length is %zu",mSoundFileName.string(),mSoundFileName.length());
return;
}
}
SLOGD("set mSoundFileName null");
mSoundFileName = "";
#endif
return;}
获取播放开机音乐路径:PRODUCT_BOOTSOUND_FILE, OEM_BOOTSOUND_FILE, SYSTEM_BOOTSOUND_FILE 中的一个
所以系统默认的路径为SYSTEM_BOOTSOUND_FILE 即为 /system/media/bootsound.mp3
也就是说和开机动画放在同一个目录就可
persist.sys.bootanim.play_sound 属性的设置
static const char PLAY_SOUND_PROP_NAME[] = "persist.sys.bootanim.play_sound";
bool BootAnimation::playSoundsAllowed() {
// Compatible with Android Things
// only system called will play sounds in system/media/
if (!mSystemCalled) {
return false;
}
// Read the system property to see if we should play the sound.
// If it's not present, default to allowed.
if (!property_get_bool(PLAY_SOUND_PROP_NAME, 1)) {return false;
}// Don't play sounds if this is a reboot due to an error.
char bootreason[PROPERTY_VALUE_MAX];
if (property_get(BOOTREASON_PROP_NAME, bootreason, nullptr) > 0) {for (const auto& str : PLAY_SOUND_BOOTREASON_BLACKLIST) {if (strcasecmp(str.c_str(), bootreason) == 0) {return false;}}
}
return true;}
是否允许播放中 会判断persist.sys.bootanim.play_sound 是否为1 如果不能播放 请查看这个值是否为1
开机铃声添加路径为:
路径:device/sprd/common/customer/system/media/bootsound.mp3
和开机动画放在同一个目录下就可以了
相关文章:
android 11 添加开机铃声
需求:在11.0在定制化系统中,默认是没有开机铃声的,有客户提出需要要添加开机铃声,所以为了完成需求,就来实现这一个功能关于开机铃声 都是在bootanimation_main.cpp 这里面负责管理。添加添加开机铃声的核心类framewor…...
操作系统考试突击复习笔记
0 基础概念补充特权命令:有特殊权限的指令,比如清内存、置时钟、分配系统资源、修改虚拟内存的段表和页表,修改用户的访问权限。系统调用:操作系统为应用程序提供的使用接口,可以理解为一种可供应用程序调用的特殊函数…...
java8函数式接口分布式事务简单实现方式
import java.util.List; import java.util.function.Function;/*** @ClassName TransactionFunctionDTO* @Description* @Author SD.LIU* @Date 2023/2/13 22:41* @Version 1.0**/ public class TransactionFunctionDTO...
最后一个单词的长度-力扣58-java
一、题目描述给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。示例 1:输入:s "Hello World"输出&#x…...
Java开发学习(四十九)----MyBatisPlus更新语句之乐观锁
1、概念 在讲解乐观锁之前,我们还是先来分析下问题: 业务并发现象带来的问题:秒杀 假如有100个商品或者票在出售,为了能保证每个商品或者票只能被一个人购买,如何保证不会出现超买或者重复卖 对于这一类问题,其实有很多的解决方…...
力扣SQL刷题11
目录标题1194. 锦标赛优胜者--做出来了1225. 报告系统状态的连续日期-勉强1159. 市场分析 II1205. 每月交易II1194. 锦标赛优胜者–做出来了 题型:看题 解答:先处理matches表,整出分数列和players表连接 注意点: union all 时…...
Fluent Python 笔记 第 9 章 符合 Python 风格的对象
得益于 Python 数据模型,自定义类型的行为可以像内置类型那样自然。实现如此自然的行为,靠的不是继承,而是鸭子类型(duck typing):我们只需按照预定行为实现对象所需的方法即可。 9.1 对象表示形式 实现 __repr__ 和 __str__ 特…...
档案管理数字化,成功的领导者,往往只问这3个问题
随着数字经济时代的到来,信息技术的更迭演进,逐渐改变了企业的办公业务流程,传统的办公业务模式已不能满足当前的企业业务需求。数字化转型成为当下企业的必选项。随着公司部门架构的日益复杂,流程繁多,产生海量的企业…...
自学软件测试从哪里开始?给还在迷茫的人一条出路
这两天和朋友谈到软件测试的发展,其实软件测试已经在不知不觉中发生了非常大的改变,前几年的软件测试行业还是一个风口,随着不断地转行人员以及毕业的大学生疯狂地涌入软件测试行业,目前软件测试行业“缺口”已经基本饱和。当然&a…...
配置MyBatis Plus 的分页查询功能
配置MyBatis Plus 的分页查询功能一. 回顾Mysql分页查询二. 配置MyBatis Plus 分页功能2.1 定义分页拦截器2.2 进行分页查询 selectPage()三. 开启MyBatis Plus的运行日志一. 回顾Mysql分页查询 limit 是MySQL当中特有的!其他数据库没有!不通用…...
Solon2 开发之插件,四、插件热插拔管理机制(H-Spi)
插件热插拔管理机制,简称:H-Spi。是框架提供的生产时用的另一种高级扩展方案。相对E-Spi,H-Spi 更侧重隔离、热插热拔、及管理性。 应用时,是以一个业务模块为单位进行开发,且封装为一个独立插件包。 1、特点说明 所…...
从react源码看hooks的原理
React暴露出来的部分Hooks //packages/react/src/React.js export {...useCallback,useContext,useEffect,useLayoutEffect,useMemo,useReducer,useRef,useState,... }功能描述 useState、useReducer: 状态值相关useEffect、useLayoutEffect: 生命周期相关useContext: 状态共…...
空间尺寸对迭代次数的影响
( A, B )---3*30*2---( 1, 0 )( 0, 1 ) ( A, B )---4*30*2---( 1, 0 )( 0, 1 ) 做4个训练集尺寸分别为3行3列,3行4列,4行3列和2行4列的网络。简写为3*3,3*4,4*3,2*4. 保持这4个网络差值结构的形态一致,…...
mininet+flowvisor+floodlight实现网络切片功能
ininetflowvisorfloodlight实现网络切片功能 这个项目所使用的软件flowvisor 和floodlight 都已经过时了网上能找到的资料太少了,整个项目搭建过程中遇到的坑太多了。花了大量的的时间。 有什么问题可提出来,如果我会的话一定会耐心解答的 此项目主要采…...
【C++】十分钟带你入门C++
目录零 内容概括一 C关键字二 命名空间2.1 命名空间定义2.2 命名空间的使用三 C输入和输出四 缺省参数4.1 缺省参数的概念4.2 缺省参数分类五 函数重载5.1 函数重载的概念六 引用6.1 引用概念6.2 引用特性6.3 常引用6.4 使用场景6.5 效率比较6.6 引用和指针的区别七 内联函数7.…...
kettle利用excel文件增量同步一个库的数据(多表一次增量同步)
利用excel文件增量同步一个库的数据 现在有sqlserver和mysql两个库上的表在进行同步,mysql上的是源表,sqlserver上是目标表。 mysql : sqlserver : 可以看到sqlserver上表的最近一次同步日期分别是 pep表: 2022-10-23 14:19:00.000 stu_…...
面试题:android中A Activity 打开B Activity,为什么A Activity的onStop()方法最后被调用
如下是一段典型的Activity间切换的日志,从A Activity切换到B Activity:10-17 20:54:42.247: I/com.example.servicetest.AActivity(5817): onCreate() 1166919192 taskID66 10-17 20:54:42.263: I/com.example.servicetest.AActivity(5817): onStart()…...
百度版本gactgpt即将来临,gpt人工智能机器横空出世
百度版本gactgpt即将来临,gpt人工智能机器横空出世,“一言”为定!百度版ChatGPT确认!李彦宏OKR曝光,率先应用于收索业务 gactCBT 大获,当下极有可能成为人工智能的 iPhone 时刻。为了在这场人工智能竞赛中…...
【python--networkx】函数说明+代码讲解
【Python–NetworkX】函数说明代码讲解 文章目录【Python--NetworkX】函数说明代码讲解1. 介绍1.1 前言1.2 图的类型(Graph Types)1.3 常用方法2. 代码示例1. 介绍 1.1 前言 NetworkX是复杂网络研究领域中的常用Python包。 1.2 图的类型(G…...
【Jqgrid分页勾选保存】三步实现表格分页勾选(取消勾选)保存(附源码)
目录1、创建临时存储数组,初始化赋值2、单行选中与取消,调整数组3、全选与取消全选,调整数组4、输出数组保存5、片尾彩蛋【写在前面】表格可以说是在我们的web页面中是最常见的,之前我们介绍过layui表格翻页勾选的实现过程&#x…...
Appium移动自动化测试——app控件获取之uiautomatorviewer
下载手机YY http://yydl.duowan.com/mobile/yymobile_client-android/5.4.2/yymobile_client-5.4.2-881.apk 若链接失效,请自行百度 新建maven空白工程 前置条件:安装eclipse,及其maven插件,请自行百度 新建的工程如下…...
webpack、vite、vue-cli、create-vue 的区别
webpack、vite、vue-cli、create-vue 的区别 首先说结论 Rollup更适合打包库,webpack更适合打包项目应用,vite基于rollup实现了热更新也适合打包项目。 功能工具工具脚手架vue-clicreate-vue构建项目vite打包代码webpackrollup 脚手架:用于初始化&#…...
数据结构——TreeMap、TreeSet与HashMap、HashSet
目录 一、Map 1、定义 2、常用方法 3、注意 二、TreeMap 三、HashMap 1、定义 2、冲突定义 3、冲突避免方法——哈希函数设计 (1)、直接定制法(常用) (2)、除留余数法(常用) (3)、平方取中法 &…...
Spring Boot学习篇(十三)
Spring Boot学习篇(十三) shiro安全框架使用篇(五) 1 准备工作 1.1 在SysUserMapper.xml中书写自定义标签 <select id"findRoles" resultType"string">select name from sys_role where id (select roleid from sys_user_role where userid (S…...
微软Bing的AI人工只能对话体验名额申请教程
微软Bing 免费体验名额申请教程流程ChatGPT这东西可太过火了。国外国内,圈里圈外都是人声鼎沸。微软,谷歌,百度这些大佬纷纷出手。连看个同花顺都有GPT概念了,搞技术,做生意的看来都盯上了 流程 下面就讲一下如何申…...
怎么打造WhatsApp Team?SaleSmartly(ss客服)告诉你
关键词:WhatsApp Team SaleSmartly(ss客服) 您是否正在寻找一种让您的团队能够在 WhatsApp协作消息传递的解决方案?拥有了 WhatsApp Team,不仅效率提升,还可以在智能聊天工具中比如SaleSmartly(ss客服&…...
IPV4地址的原理和配置
第三章:IP地址的配置 IPv4(Internet Protocol Version 4)协议族是TCP/IP协议族中最为核心的协议族。它工作在TCP/IP协议栈的网络层,该层与OSI参考模型的网络层相对应。网络层提供了无连接数据传输服务,即网络在发送分…...
软件测试面试准备——(一)Selenium(1)基础问题及自动化测试
滴滴面试:1. 自己负责哪部分功能?农餐对接系统分为了两大子系统,一个是个人订餐系统,二是餐馆、个人与农产品供应商进行农产品交易系统。我主要负责组织测试人员对该系统进行测试。我们测试分为两个阶段:一、功能测试阶…...
AcWing 1230.K倍区间
AcWing 1230. K倍区间 题目描述 给定一个长度为 NNN 的数列,A1,A2,…ANA_1, A_2, … A_NA1,A2,…AN ,如果其中一段连续的子序列 Ai,Ai1,…AjA_i, A_{i1}, … A_jAi,Ai1,…Aj 之和是 KKK 的倍数,我们就称这个区间 [i,j][i,j][i,…...
kubernetes集群部署springcloud项目【AL】【未写完】
kubernetes集群部署springcloud项目【AL】 (先手工做,非自动化) #环境: 192.168.73.138 master 192.168.73.139 node1 192.168.73.140 node2 192.168.73.137 harbor、mysqlgit clone https://github.com/lizhenliang/simple-…...
阿里巴巴网站详情页怎么做/seo综合查询工具
最近遇到一个作业,要求使用 Echarts 散点图,本来这个图是很容易的,官网上也有很多的教程。但是如果可以动态的更新 Echarts 散点图就更好了。我本身对 js 不感兴趣,经过不停的查找资料最终实现了这一功能。 我的项目是 Servlet…...
网站上传在空间哪里去了/免费网站自助建站系统
MAKER:Rob Cai/ 译:趣无尽本期将为大家介如何用两个 Arduino 制作一个可以运行 BASIC 的复古8位计算机。更棒的是,这个计算机带有 VGA 接口和 PS2 键盘接口,已经还原了当年上微机课时所用的老爷机了(暴露年龄,逃~)。你…...
高质量的邯郸网站建设/seo教程书籍
17Tech 消息:瑞星程序员自曝内幕:“瑞星2007程序核心部分内部机密,现在告诉大家,我辞职了” 瑞星2007程序核心部分内部机密,现在告诉大家,我辞职了 我辞职的原因是因为瑞星总部,已经没有精英在了࿰…...
网站建设方案 市场分析/一份完整的品牌策划方案
我们可以通过在命令行中对我们的 Beats 进行管理,比如我们可以启动 metric 几个模块,我们可以通过如下的命令来执行: ./metricbeat modules enable apache mysql 上面的命令启动 apache mysql 模块。我们也许觉得这个这样做很方便。但是如果…...
易语言如何做网站吗/教你如何快速建站
java jdk在Linux下安装与环境变量的配置 by:授客 QQ:1033553122 linux环境:CentOS-6.0-x86_64-bin-DVD1.iso [rootlocalhost software]# ls jdk-6u13-linux-i586.bin jdk-6u13-linux-i586.zip 步骤1.创建并java安装目录 [rootlocalhost software]# mkdi…...
模板网站哪家好/网站如何在百度刷排名
/* 现象:ORA-28001:the password has expired原因:由于Oracle11g中默认在default概要文件中设置了“PASSWORD_LIFE_TIME180天”所致影响:数据库密码过期后,业务进程一旦重启会提示连接失败,影响业务使用处理步骤&#…...