【Android 】使用MediaPlayer播放音频以及AudioManager简介

这里主要通过 MediaPlayer以及 AudioManager 来实现的对应的功能。
1.第一种,播放本地媒体文件:

你需要自己准备一个MP3格式的音频文件;

然后在资源目录(res)里面新建一个raw文件夹,将文件复制进去
像这样:

然后是使用

var mediaPlayer= MediaPlayer.create(getActivity().getApplicationContext(), R.raw.kc_voice_bi); mediaPlayer.start();

我这里是在 fragment 中使用,要在 activity 中使用直接将 getActivity().getApplicationContext() 替换成 this 即可。

2.播放 URL 音频:

由于是 url 肯定是需要拉权限的
这里找到 AndroidManifest.xml ,在里头插入两短代码

<!-- 外部存储 --> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!-- 声音播放权限 --> <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL"/>

然后就可播放了,这边直接上业务代码。

MediaPlayer mPlayer = new MediaPlayer(); String url = "https://downsc.chinaz.net/Files/DownLoad/sound1/202210/y1253.mp3"; mPlayer.setAudioAttributes(new AudioAttributes .Builder() .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC) // 提示音类型 .build()); // 通常需要try catch 一下 mPlayer.setDataSource(url); mPlayer.prepare(); // 一定要放在 setDataSource,prepare 之后 mPlayer.start();

到这里 就基本实现了对于音频的播放,如果想要进一步的了解的话。
这边还有一个 AudioManager 音频管理模块

这边有几个好用的方法
1.setStreamVolume(streamType, index, flags) -控制对应播放通道的音频大小。
streamType- 表示音频类型(官方解释 卷的索引流)即通过媒体、系统等通道播放音频
不同的Android版本用的通道不同

以 Android 13.0 举例(上源码)


主要有 STREAM_VOICE_CALL(通话)、STREAM_SYSTEM(系统声音)、STREAM_RING(铃声)、STREAM_MUSIC(音乐)、STREAM_ALARM(闹铃声)

常用的 无非媒体、系统、通话以及闹铃 使用哪一种看业务需求。
直接控制音量的多少

if(isSilent){ mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,0, 0); }else{ mAudioManager.setStreamVolume(AudioManager.STREAM_MUSIC,tempVolume, 0);//tempVolume:音量绝对值 }

以一步步长控制音量的增减,并弹出系统默认音量控制条:

//降低音量,调出系统音量控制 if(flag ==0){ mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_LOWER, AudioManager.FX_FOCUS_NAVIGATION_UP); } //增加音量,调出系统音量控制 else if(flag ==1){ mAudioManager.adjustStreamVolume(AudioManager.STREAM_MUSIC,AudioManager.ADJUST_RAISE, AudioManager.FX_FOCUS_NAVIGATION_UP); }

index - 调节音量大小 (ADJUST_LOWER|ADJUST_SAME)减少|增大 以及取消静音 ADJUST_UNMUTE

flags - 设置模式 FLAG_SHOW_UI | FLAG_VIBRATE. 前者告诉AudioService需要弹出一个音量控制面板,后者可能,只是可能是设置在为0时震动一下,而设置了FLAG_PLAY_SOUND是松开音量键时有个提示音。

  1. getMode() 返回当前音频模式,如 NORMAL(普通), RINGTONE(铃声), orIN_CALL(通话)
    而 setMode() 就是设置声音模式,可用参数同上。

  2. 获得当前手机最大铃声 - setStreamMute(int streamType, boolean state)
    state为true,则设置为静音;否则,不设置为静音

扩展:setStreamVolume 和 adjustStreamVolume 区别
除了 setStreamVolume 之外, adjustStreamVolume 也能调节音量 两者之间的区别在于 setStreamVolume:直接设置音量大小 adjustStreamVolume :设置direction,以步长调节音量大小

__EOF__

本文作者派大星⊙∫⊙
本文链接https://www.cnblogs.com/liusixiang/p/17030452.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   派大星⊙∫⊙  阅读(1151)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示