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函数接口就可以进行音量调节。

相关推荐
Anastasiozzzz18 分钟前
Java异步编程:CompletableFuture从入门到底层实现
java·开发语言
姜行运24 分钟前
【Linux】基础指令2
android·linux·服务器
xiaomin-Michael27 分钟前
netty学习
java
上海合宙LuatOS1 小时前
LuatOS核心库API——【fft 】 快速傅里叶变换
java·前端·人工智能·单片机·嵌入式硬件·物联网·机器学习
爱敲代码的小鱼1 小时前
web后端开发SpringBootWeb的入门:
java·spring boot·spring
大模型玩家七七1 小时前
技术抉择:微调还是 RAG?——以春节祝福生成为例
android·java·大数据·开发语言·人工智能·算法·安全
那我掉的头发算什么1 小时前
【SpringBoot】统一功能处理详解
java·spring boot·后端·spring
逍遥德1 小时前
编程技能点小记之if-else条件分支合理用法
java·开发语言·代码规范·代码复审·极限编程·代码覆盖率
瞎某某Blinder1 小时前
DFT学习记录[3]:material project api使用方法 mp_api调取与pymatgen保存
java·笔记·python·学习
低调小一1 小时前
Fresco 图片加载全链路解析:从 SimpleDraweeView 到 Producer 责任链
android·开发语言·fresco