Android音量调节的实现(RingtoneManager和RingerVolumePreference)

Android音频相关(八)来电铃声播放流程 铃声的设置流程之前总结过,可以参考该文章: Android音频相关(四)设置铃声流程总结 一、铃声播放准备 二、铃声播放 三、总结 本文主要介绍的下面标红的播放流程,SystemUI的播放流程我们在另一篇文章进行介绍。 一、铃声播放准备 1.来电后最先会通过telecom中的Ringer.java里面的方法mRingtonePlayer.play(mRingtoneF... 阅读详情

Android音量调节的实现,分两种情况说明,一种是在settings的音量设置界面,按下侧键进行调节;另一种是在非settings界面,按下侧键进行音量调节。这两种调节方式的实现不一样,分别操作的是两个不同的音量SeekBar。下面,分别进行分析:

 

 

一.  在settings的音量设置界面,按下侧键进行调节:

在settings的音量设置界面,按下侧键回有音量的调节,同时,会播放音乐(这个音乐是在铃声设置中设置的),整个过程的实现的相关代码如下:
1. settings的音量设置界面:
   文件: packages/apps/Settings/src/com/android/settings/RingerVolumePreference.java
   说明: 在这个RingerVolumePreference,会调用 audioManager.setStreamVolume进行音量大小的调节,但是,播放声音却不在这个文件中。
2. 播放音乐:
   文件: frameworks/base/core/java/android/preference/VolumePreference.java
   说明:RingerVolumePreference继承自VolumePreference,当点击侧键时,VolumePreference的onKey函数会收到键值,并通过mSeekBarVolumizer.changeVolumeBy, sample,  mRingtone.play 最终播放出音乐。

值得注意的是:mRingtone.play用的是 new MediaPlayer 的方式,通过创建MediaPlayer来实现音乐的播放。

 

二.   在非settings界面按侧键进行音量的调节:

 

实现: 通过RingtoneManager会调用到AudioManager的adjustStreamVolume,进而调用AudioServicer的adjustStreamVolume,最主要的就是这个函数了。

在这个函数中:

1. checkForRingerModeChange(oldIndex, direction); oldIndex指的是知之前的音量,direction表明是增加还是降低音量。见名知意,这个函数用于检测改变铃声模式,如振动,静音等,是通过调用setRingerMode函数来实现的。而setRingerMode通过发送广播(调用broadcastRingerMode函数)来通知模式的改变。

2. sendMsg: 发送消息,处理这个消息的是handleMessage函数,调用setStreamVolumeIndex来调节音量,其实,最终是通过AudioPolicyService的对应函数实现的。

3. mVolumePanel.postVolumeChanged(streamType, flags); // 用于更新UI.

4. sendVolumeUpdate: 会发送AudioManager.VOLUME_CHANGED_ACTION,处理这个intent的是最终的目的是用于播放那个短促的蜂鸣声(见ToneGenerator.java的startTone)。

5. ToneGenerator.java的startTone的分析: 通过jni调用到ToneGenerator.cpp的startTone函数。

 

值的注意的是,最终是通过AudioTrack来实现这个声音的处理的,而不是创建MediaPlay, 这与settings中的处理方式是不同的。

 

题外话: 来电的声音播放方式也是通过Ringtone,创建MediaPlay来实现的。

 

 

Android 实现三种响铃模式的切换 在android 原生系统中,对响铃模式有三种模式分为静音模式 震动模式 正常模式,最近有需求功能需要实现这三种模式的切换 而原生系统AudioManager 的api可以获取当前响铃模式 如下: int ringerMode = mAudioManager.getRingerMode(); 1 .其中ringerMode 的值只能是: AudioManager.RINGER_MODE_NORMAL AudioManager.RINGER_MODE_SILENT AudioManager.RINGER_MO 阅读详情

相关推荐

淘特App x-sign参数逆向实战:从抓包到算法定位

本文详细解析了淘特App的x-sign参数逆向过程,从抓包分析到算法定位,涵盖了使用jadx-gui进行静态分析、Frida动态Hook验证以及Native层算法还原等关键技术。文章重点介绍了x-sign参数的生成机制及其在阿里系应用中的安全防护策略,为逆向工程师提供了实用的调试技巧和对抗策略。

5b6n7m8的博客 226

RingtoneManager

铃声学习 RingtoneManager.getRingtone(context, ringtoneUri);获取铃声Ringtone对象 不管哪里用到铃声,都会有弹出一个Dialog 选择铃声 因此我们自己使用的时候应该通过intent+action 弹出,这个界面在/packages/providers/MediaProvide然后就是com.android.providor.media.

在路上 1366

大漠多线程增强版:解决窗口消失、坐标错乱与识别卡死

多线程环境下窗口自动化面临的核心挑战,本质是GDI资源非线程安全、HWND生命周期失控及图像引擎状态污染三大底层问题。Windows GUI编程中,跨线程共享hDC、缓存失效的窗口句柄、OpenCV静态Mat等设计缺陷,导致FindPic失败、GetCursorPos异常、坐标跳变等典型故障。本方案通过线程局部存储(TLS)重构资源生命周期、WinEventHook+心跳探测构建实时窗口状态链、ABI对齐的多语言内存契约,实现稳定低延迟的并发UI识别与控制。适用于游戏多开监控、电商RPA、后台UI状态采集等

weixin_30561177的博客 476

利用RingToneManager设置手机铃声(多选)

//需要传入一个文件路径(path),和context public static void setMyRingtone(Context context, String path) { File sdfile = new File(path); String ab_path = sdfile.getAbsolutePath(); ContentValues values = new

erone的专栏 1838

浅谈向量检索

文章目录浅谈向量检索背景什么是向量什么是向量检索距离度量检索方法ANN的基本思路举个容易理解栗子举个正常的例子具体算法树方法KD-TreeAnnoyHash方法LSH 算法矢量量化方法乘积量化码本的建立码字搜索算法倒排乘积量化临近图方法HNSW 算法朴素想法Delaunay算法NSW 主要思想NSW构图NSW查找参考 浅谈向量检索 背景 索引一直被认为是检索引擎最重要的组成部分,之所以数据库能够快速的查询出来结果。系统设计中很多常见的多种数据结构都是为了快速命中索引设计的, 比如 红黑树、跳跃表、倒排索引、

qq_42828391的博客 6552

使用SIMD思想进行memcpy的优化

arm64平台的memcpy的性能优化,相比C库提升30~40%,SIMD优化思路

zhaoxin1989的博客 1万+

Android 多媒体之音频----(日积月累)

日积月累--Android音频总结

taotao0001tao的博客 979

OData Request:Create Entity 在 ABAP OData Client Proxy 中的工程化实践

文章摘要 本文针对具备 SAP Gateway 与 ABAP 开发经验的读者,详细讲解如何通过 ABAP OData Client Proxy 实现 OData 服务的 Create 操作。首先对比了 OData V2 与 V4 的 Create 规范差异,强调键、集合 URL 和请求体的标准化要求。随后介绍了 ABAP Client Proxy 的编程模型,包括 Client Proxy、Entity List Resource 和 Create Request/Response 三个核心对象,并提供了完

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 247

Android音量调节的实现(RingtoneManager和RingerVolumePreference) .

转载地址:http://blog.youkuaiyun.com/liranke/article/details/6683000 Android音量调节的实现,分两种情况说明,一种是在settings的音量设置界面,按下侧键进行调节;另一种是在非settings界面,按下侧键进行音量调节。这两种调节方式的实现不一样,分别操作的是两个不同的音量SeekBar。下面,分别进行分析: 一.  在set

ludeng8的专栏 1788

Autosar PNC网络管理配置(1)-基于ETAS软件

Autosar PNC网络管理配置(1)-基于ETAS软件

赞的博客 2725

rk3576 点亮 LCD(mipi)

瑞芯微 RK3576 是一款面向中高端 AIoT 市场的 SoC,其 MIPI DSI (Display Serial Interface) 接口在性能和灵活性上相比前代(如 RK3399/RK3568)有显著提升,特别是在物理层协议的支持上更加现代化。相比RK3399 RK3568的mipi 接口少了 8lane,但是RK3576 MIPI DSI 增加更低功耗的 C-PHY。

weixin_35723192的博客 362

Android音量调节两种方式

Android音量调节的实现,分两种情况说明,一种是在settings的音量设置界面,按下侧键进行调节;另一种是在非settings界面,按下侧键进行音量调节。这两种调节方式的实现不一样,分别操作的是两个不同的音量SeekBar。下面,分别进行分析: 一. 在settings的音量设置界面,按下侧键进行调节: 在settings的音量设置界面,按下侧键回有音量的调节,同时,...

weixin_33712987的博客 429

【示波器专题】示波器探头的原理深入——有源探头之差分有源探头

差分有源探头是一种特殊的有源探头,与普通单端有源探头的区别在于其前端的放大器是差分放大器。差分放大器的好处是可以直接测试高速差分信号,同时其共模抑制比高,对共模噪声的抑制能力比较好。...

一点硬件 2623

Android RingtoneManager铃声管理

Android RingtoneManager铃声管理 ringtonemanager提供铃声,通知,和其他类型的声音。它管理查询不同的媒体提供商和结合成一个光标。它还为每一个铃声提供了Ringtone 。我们通常称这些铃声 ringtones,然而TYPE_RINGTONE 提供手机铃声,适合的声音类型。 给用户显示一个铃声选择器,使用ACTION_RINGTONE_PICKER 意图发动器

苏宸Coder 4287

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

android 铃声管理器,android RingtoneManager 铃声管理器

获取默认铃声Uri/Uri StringUri sound = RingtoneManager.getDefaultUri(type);(type =RingtoneManager.TYPE_RINGTONE orRingtoneManager.TYPE_NOTIFICATION orRingtoneManager.TYPE_ALARM以下同)获取铃声Uri/Uri StringString...

weixin_39693662的博客 949

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

android RingtoneManager 铃声管理器

获取默认铃声Uri/ Uri String Uri sound = RingtoneManager.getDefaultUri(type);(type =RingtoneManager.TYPE_RINGTONE orRingtoneManager.TYPE_NOTIFICATION orRingtoneManager.TYPE_ALARM以下同) ...

weixin_30248399的博客 651

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Android 12 adb 串口指令设置耳机音量适配

Android 12 adb 串口音量设置指令适配

郑敏 3153

android ringtonemanager raw,ringtone播放自定义的声音

主要是Uri的获取!!!Uri leave = null;Ringtone r = RingtoneManager.getRingtone(getApplicationContext(), leave.parse("android.resource://" + getPackageName() + "/" +R.raw.audio));r.play();下面程式是在引發Notification功能...

weixin_32556315的博客 798

RingtoneManager铃声设置

/system/media/audio/ringtones 来电铃声 /system/media/audio/notifications 短信通知铃声 /system/media/audio/alarms 闹钟铃声 中心服务:RingtoneManager ******************************************

HDHunter的专栏 2425
上一篇: git 常用命令-程序员必备技能,git push,git pull
下一篇: Android又现空指针(java.lang.NullPointerException)
liranke
博客等级 码龄20年 4939粉丝 594原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

打赏作者

liranke

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

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

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

打赏作者

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

抵扣说明:

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

余额充值