android audio不同音频流,(七)音频流音量APK按键调整

(1)apk通过,dispatchKeyEvent()函数监测按键事件:

// APK onCreate()时,初始化音频流音量,假定mediaPlayer播放使用STREAM_ALARM流:

mAudioManager = (AudioManager) this.getSystemService(this.AUDIO_SERVICE);

// 取出对应流,音量Max,Min

mMaxVol = mAudioManager.getStreamMaxVolume(AudioManager.STREAM_ALARM);

mminVol = mAudioManager.getStreamMinVolume(AudioManager.STREAM_ALARM);

apk接收到按键事件,执行如下处理,调用AudioManager对象函数处理:

@Override

public boolean dispatchKeyEvent(@NonNull KeyEvent keyEvent){

final int keyCode = keyEvent.getKeyCode();

// 取出音频流,当前音量

int vol = mAudioManager.getStreamVolume(AudioManager.STREAM_ALARM);

switch(keyCode){

case KeyEvent.KEYCODE_VOLUME_UP:

if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) { // 限制按键按下,进行音量调整

if( vol< mMaxVol ){

// setStreamVolume()进行音量设置

mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, ++vol,0 );

}

}

break;

case KeyEvent.KEYCODE_VOLUME_DOWN:

if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) { // 限制按键按下,进行音量调整

if(vol> mminVol ){

// setStreamVolume()进行音量设置

mAudioManager.setStreamVolume(AudioManager.STREAM_ALARM, --vol,0 );

}

}

break;

}

return true;

}

(2)AudioManager对象类文件:

文件路径:

frameworks/base/media/java/android/media/AudioManager.java

AudioManager类,音量调节函数:

public void setStreamVolume(int streamType, int index, int flags) {

final IAudioService service = getService();

try {

service.setStreamVolume(streamType, index, flags, getContext().getOpPackageName());

} catch (RemoteException e) {

throw e.rethrowFromSystemServer();

}

}

apk通过监测按键事件,再调用AudioManager函数接口就可以进行音量调节。

相关推荐
皆过客,揽星河18 小时前
Linux上安装MySQL8详细教程
android·linux·hadoop·mysql·linux安装mysql·数据库安装·详细教程
练习时长一年18 小时前
自定义事件发布器
java·前端·数据库
nightunderblackcat18 小时前
新手向:实现验证码程序
java·spring boot·spring·java-ee·kafka·maven·intellij-idea
oioihoii18 小时前
构造函数和析构函数中的多态陷阱:C++的隐秘角落
java·开发语言·c++
catchadmin18 小时前
开发 PHP 扩展新途径 通过 FrankenPHP 用 Go 语言编写 PHP 扩展
android·golang·php
a5876919 小时前
消息队列(MQ)高级特性深度剖析:详解RabbitMQ与Kafka
java·分布式·面试·kafka·rabbitmq·linq
代码雕刻家19 小时前
3.1.Maven-课程介绍
java·maven
li357419 小时前
深入理解:MQ监听类 vs Spring事件监听类 —— 区别、用法与适用场景全解析
java·数据库·spring
灵感蛙19 小时前
《苍穹外卖》项目日记_Day7
java·spring boot·redis
lifallen19 小时前
KafkaStreams 计算图节点设计:ProcessorNode、SourceNode、SinkNode
java·数据结构·算法·kafka·apache