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

Android 使用实现简单的音乐播放以及管理的更多相关文章

  1. Android应用--简、美音乐播放器增加音量控制

    Android应用--简.美音乐播放器增加音量控制 2013年6月26日简.美音乐播放器继续完善中.. 题外话:上一篇博客是在6月11号发的,那篇博客似乎有点问题,可能是因为代码结构有点乱的原因,很难 ...

  2. Android应用--简、美音乐播放器获取专辑图片(自定义列表适配器)

    Android应用--简.美音乐播放器获取专辑图片(自定义列表适配器) 2013年7月3日简.美音乐播放器开发 第二阶段已增加功能: 1.歌词滚动显示 2.来电监听 3.音量控制 4.左右滑动切换歌词 ...

  3. 简单的音乐播放器(VS 2010 + Qt 4.8.5)

    昨天历经千辛万苦,配置好了VS 2010中的Qt环境(包括Qt for VS插件),今天决定浅浅地品味一下将两者结合进行编程的魅力. 上网查了一些资料,学习了一些基础知识,决定做一个简单的音乐播放器, ...

  4. swift3.0 简单直播和简单网络音乐播放器

    本项目采用swift3.0所写,适配iOS9.0+,所有界面均采用代码布局. 第一个tab写的是简单直播,传统MVC模式,第二个tab写的是简单网络音乐播放器.传说MVVM模式(至于血统是否纯正我就不 ...

  5. 使用Service组件实现简单的音乐播放器功能 --Android基础

    1.本例利用Service实现简单的音乐播放功能,下面是效果图.(点击开始播放开启服务,音乐播放,点击“停止播放”关闭服务,音乐停止播放.) 2.核心代码: MusicService.java: pa ...

  6. 用PHP+H5+Boostrap做简单的音乐播放器(进阶版)

    前言:之前做了一个音乐播放器(纯前端),意外的受欢迎,然后有人建议我把后台一起做了,正好也想学习后台,所以学了两天php(不要吐槽我的速度,慢工出细活嘛~)然后在之前的基础上也又完善了一些功能,所以这 ...

  7. Android课程---简单的音乐播放器

    第一个:用Activity实现 activity_music_play1.xml <?xml version="1.0" encoding="utf-8" ...

  8. Android——用Activity和Service实现简单的音乐播放器

    一.只用Activity 容易出现问题 xml <?xml version="1.0" encoding="utf-8"?> <LinearL ...

  9. 用H5+Boostrap做简单的音乐播放器

    前言:这个是综合一下我最近在学的东西做的小Demo,到实际使用还有距离,但是用来练手巩固知识点还是不错的,最近在二刷JS书和Boostrap.css的源码,做完这个Demo也算是暂告一段落,接下来是j ...

  10. Android : 基于alsa库的音乐播放

    继上篇:Android : alsa-lib 移植 ,这篇随笔实现一个demo基于移植好的alsa库在Android平台上播放wav文件: 一.利用ffmeg将一个mp3文件转换成wav文件: (1) ...

随机推荐

  1. 算法设计(动态规划实验报告) 基于动态规划的背包问题、Warshall算法和Floyd算法

    一.名称 动态规划法应用 二.目的 1.掌握动态规划法的基本思想: 2.学会运用动态规划法解决实际设计应用中碰到的问题. 三.要求 1.基于动态规划法思想解决背包问题(递归或自底向上的实现均可): 2 ...

  2. 齐博x1如果把万能表单直接插入到内容中去

    很多时候,你创建了一个万能表单可能像下面这个情况,在文章中加一个链接叫别人点击填表,其实这个很不人性化,用户也容易忽略. 其实你完全可以像下面这样,把表单直接引用到文章中来.给用户更直观的感觉 那是如 ...

  3. 浅谈--ETCD的基本概念及用法

    1. 简介 ETCD 是一个高可用的分布式键值数据库,可用于服务发现.ETCD 采用 raft 一致性算法,基于 Go 语言实现. raft是一个强一致的集群日志同步算法. ETCD使用gRPC,网络 ...

  4. Java多线程-ThreadPool线程池(三)

    开完一趟车完整的过程是启动.行驶和停车,但老司机都知道,真正费油的不是行驶,而是长时间的怠速.频繁地踩刹车等动作.因为在速度切换的过程中,发送机要多做一些工作,当然就要多费一些油. 而一个Java线程 ...

  5. G1 垃圾收集器深入剖析(图文超详解)

    G1(Garbage First)垃圾收集器是目前垃圾回收技术最前沿的成果之一. G1 同 CMS 垃圾回收器一样,关注最小时延的垃圾回收器,适合大尺寸堆内存的垃圾收集.但是,G1 最大的特点是引入分 ...

  6. 【第5篇】AI语音简介

    1.3  AI语音简介 AI语音既人工智能语音技术,以语音识别技术为开端,实现人机语言的通信,包括语音识别技术(ASR).自然语言处理技术(NLP)和语音合成技术(TTS).通俗点说就是通过语音这个媒 ...

  7. 第一百零七篇:基本数据类型(undefined,null,boolean类型)

    好家伙, 本篇内容为<JS高级程序设计>第三章学习笔记 1.数据类型 ECMAScript有6种简单数据类型(称为原始类型): Undefined, Null, Boolean, Numb ...

  8. NC-UClient下载安装应用详解

    aliases: [] tags : " #NC " summary: [UClient下载安装NCC应用详解] product: [NCX] author : [yaenli] ...

  9. ElasticSearch 常见问题

    ElasticSearch 常见问题 丈夫有泪不轻弹,只因未到伤心处. 1.说说 es 的一些调优手段. 仅索引层面调优手段: 1.1.设计阶段调优 (1)根据业务增量需求,采取基于日期模板创建索引, ...

  10. python列表、元祖

    #列表创建1 a=['李刚','李白','王维','苏轼','李商隐','苏洵','王安石','司马光'] #列表创建2 b=list(['李刚','李白','王维','苏轼','李商隐','苏洵', ...