这里主要通过 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,以步长调节音量大小

最新文章

  1. List集合去重的一种方法
  2. 我们一起来动手开发一个Orm框架,开源发布
  3. 最新的SqlHelper 类
  4. WPF多线程UI更新——两种方法
  5. python list删除元素 del remove
  6. extjs笔记
  7. Flask-Request对象属性
  8. 关于Latex中插入Visio图片文字不显示的问题
  9. Linux指令--ifconfig
  10. SpringBoot整合Sqlite数据库流程
  11. &quot;title_activity_dist&quot; is not translated in &quot;zh-rCN&quot; (Chinese: China)
  12. MySQL实验准备(二)--Python模拟数据(MySQL数据库)
  13. 如何创建和还原SQL Server 2000数据库?
  14. 【转】Android AlertDialog自定义布局
  15. TPO-19 C2 Cafeteria&#39;s Food Policy
  16. I/O限制异步操作
  17. EasyTouch5初步用法和其中的一个Bug
  18. Windows Git 服务器 客户端 Delphi Git配置
  19. cookie注入原理及注入检测
  20. 手游为什么要热更新,C#为什么不能热更新,LUA为什么可以

热门文章

  1. python 网络爬虫全流程教学,从入门到实战(requests+bs4+存储文件)
  2. NLP之基于Transformer的句子翻译
  3. 【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?
  4. (二)Three光线检测-实现摄像机向鼠标点击位置滑动动画
  5. 二十九、Helm常用命令
  6. 云原生之旅 - 7)部署Terrform基础设施代码的自动化利器 Atlantis
  7. &quot;xxx cannot be cast to jakarta.servlet.Servlet &quot;报错解决方式
  8. PYQT5 学习
  9. Ubuntu 20.04 开启root权限登陆、网卡配置
  10. redisson分布式锁原理剖析