Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)

  • 准备
    • 1.储存在raw文件夹
    • 2.储存在assets文件夹
  • 1.音频
    • 1.播放音乐
    • 2.暂停音乐
    • 3.继续播放音乐
    • 4.获取播放时间
    • 5.快进到指定位置
    • 6.变速播放
    • 7.播放data/data/目录下的音频文件
    • 8.播放网络歌曲

Android 入门第八讲02-WebView的高级用法(Android调用 JS 代码( loadUrl 方法,案例练习),JS调用 Android 代码,流行框架总结,跨平台技术)

Android里面的多媒体主要是两部分,第一部分是音频和视频,第二部分是动画(帧动画,补间动画,属性动画)

准备

先导入我们需要用到的音频文件和视频文件

1.储存在raw文件夹

第一步,创建raw文件夹

导入文件

2.储存在assets文件夹

第一步,创建assets文件夹

第二步导入文件

1.音频

1.播放音乐

第一步,添加播放音乐按钮

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity"><Buttonandroid:id="@+id/button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginStart="40dp"android:layout_marginLeft="40dp"android:layout_marginTop="106dp"android:text="播放音乐"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>


第二步,通过MediaPlayer来播放音乐


public class MainActivity extends AppCompatActivity {MediaPlayer mMediaPlayer;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);Button button=findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//播放音乐mMediaPlayer=MediaPlayer.create(MainActivity.this,R.raw.a1);mMediaPlayer.start();}});}
}

运行(这里动态图没有声音,但可以仔细观察,右下角录屏软件悬浮球,一开始是静止的,在点击播放音乐后,有音频波浪变化)

2.暂停音乐

第一步,添加停止播放的按钮
复制代码到之前的布局代码的下面

 <Buttonandroid:id="@+id/button2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginTop="116dp"android:layout_marginEnd="40dp"android:layout_marginRight="40dp"android:text="暂停音乐"app:layout_constraintBottom_toBottomOf="@+id/button"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintTop_toTopOf="parent" />

第二步,调用pause方法暂停音乐

 Button button1=findViewById(R.id.button2);button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//暂停音乐mMediaPlayer.pause();}});

运行(仔细看悬浮球,在点击暂停后音频波浪不再变化)

但是这里暂停以后再点击播放音乐,会重新加载音乐,也就是从头播放音乐,这个问题下面来解决

3.继续播放音乐

实际上很简单,只需要加一个if判断语句,只在mMediaPlayer==null重新加载文件,不等于空时直接播放,不需要重新加载

 Button button=findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (mMediaPlayer == null) {mMediaPlayer=MediaPlayer.create(MainActivity.this,R.raw.a1);}//播放音乐mMediaPlayer.start();}});

运行(这里好像不能证明是继续播放,哈哈,相信我,一定可以的)


还有一个问题(如果我们运行程序后直接点击暂停文件,会出现闪退)

原因在于,因为一开始我们没有点击播放音乐的话,实际上就没有加载MediaPlayer加载文件,所以直接点击暂停音乐会报空指针错误

解决方法,用if判断,只在MediaPlayer不为空的时候调用pause方法

 Button button1=findViewById(R.id.button2);button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//因为一开始没有播放音乐的时候,实际上就没有加载音频文件,所以点击暂停会报空指针if (mMediaPlayer !=null) {//暂停音乐mMediaPlayer.pause();}}});

4.获取播放时间

在实现一个进度条的时候,需要获取歌曲当前播放时间和歌曲的总时长

               //获取音乐当前播放的时间Log.i("Mainactivity","当前播放时间:"+mMediaPlayer.getCurrentPosition()+"ms");//获取音乐总时长Log.i("Mainactivity","总时长:"+mMediaPlayer.getDuration()+"ms");

5.快进到指定位置

在实现一个拖动进度条来改变音乐播放的位置时,我们需要音乐跳到指定位置,需要用到seekto 这个方法

  Button button1=findViewById(R.id.button2);button1.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {//快进到50秒的位置mMediaPlayer.seekTo(50*1000);//获取音乐当前播放的时间Log.i("Mainactivity","当前播放时间:"+mMediaPlayer.getCurrentPosition()+"ms");//获取音乐总时长Log.i("Mainactivity","总时长:"+mMediaPlayer.getDuration()+"ms");}});

运行(点击暂停按钮(实际上是快进),可以看打印日志,音乐快进到了50秒的位置)

6.变速播放

Button button1=findViewById(R.id.button2);button1.setOnClickListener(new View.OnClickListener() {@RequiresApi(api = Build.VERSION_CODES.M)@Overridepublic void onClick(View v) {PlaybackParams playbackParams=mMediaPlayer.getPlaybackParams();playbackParams.setSpeed(3.0f);//  3 倍速播放mMediaPlayer.setPlaybackParams(playbackParams);//获取音乐当前播放的时间Log.i("Mainactivity","当前播放时间:"+mMediaPlayer.getCurrentPosition()+"ms");//获取音乐总时长Log.i("Mainactivity","总时长:"+mMediaPlayer.getDuration()+"ms");}});

这里报了个错,表示只有在手机版本在23或者以上才能运行

我们只需要按住alt+enter,添加注释就可以了

运行(可以发现两次播放时间跨度比正常时间大)

7.播放data/data/目录下的音频文件

第一步,上传文件

第二步,拿到音频文件的位置,并且捕获异常

  Button button=findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (mMediaPlayer == null) {mMediaPlayer=new MediaPlayer();try {mMediaPlayer.setDataSource("data/data/com.c201801020224.myapplication/a1.mp3");mMediaPlayer.prepare();//先缓冲一下} catch (IOException e) {e.printStackTrace();}}//播放音乐mMediaPlayer.start();}});

运行

8.播放网络歌曲

第一步,添加权限

<uses-permission android:name="android.permission.INTERNET"/>

application结点下添加

android:usesCleartextTraffic="true"


第二步,获取网络歌曲

        Button button=findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {if (mMediaPlayer == null) {mMediaPlayer=new MediaPlayer();try {mMediaPlayer.setDataSource("http://148.70.46.9/123.mp3");//网络歌曲地址mMediaPlayer.prepareAsync();//异步缓冲mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {//监听是否缓冲完毕,缓冲完成再播放音乐@Overridepublic void onPrepared(MediaPlayer mp) {//播放音乐mMediaPlayer.start();}});} catch (IOException e) {e.printStackTrace();}}}});

第三步,卸载应用(因为添加了权限,所以需要重新生成应用)

第四步,运行(可能开始缓冲会比本地速度慢一点)

关于音频播放就先讲到这里啦,下一讲我们讲视频播放,谢谢您的阅读。
附一张麦迪帅照

Android 入门第九讲02-视频(本地视频播放,暂停,获取播放时间,重新播放,播放到指定位置,MediaController类(实现进度条,快进,播放暂停),播放网络视频)
博主为了可以学到更多的Android知识,创建了一个安卓知识交流群,欢迎大佬入群,当然也欢迎和我一样的安卓小白,我们可以一起交流,最重要的是快乐水群,记得定个小目标,冲击bat

Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)相关推荐

  1. Android 入门第二讲03-约束布局ConstraintLayout(可视化介绍,Chains链,MATCH_CONSTRAIN,百分比布局,圆形定位,Guideline,Barrier)

    Android 入门第二讲03-约束布局ConstraintLayout(可视化介绍,Chains链,MATCH_CONSTRAIN,百分比布局,圆形定位,Guideline,Barrier) 1.可 ...

  2. Java Web基础入门第九讲 Java Web开发入门——再探Tomcat服务器

    web应用程序 web应用程序指供浏览器访问的程序,通常也简称为web应用.例如有a.html.b.html--多个web资源,这多个web资源用于对外提供邮件服务,此时应把这多个web资源放在一个目 ...

  3. android读取mysql数据库文件_Android开发系列(十七):读取assets目录下的数据库文件...

    在做Android应用的时候,不可避免要用到数据库.但是当我们把应用的apk部署到真机上的时候,已经创建好的数据库及其里边的数据是不能随着apk一起安装到真机上的. (PS:这篇博客解决了我前面博客中 ...

  4. 安卓平板倍速_推荐:安卓上本地音频播放器,可实现5秒快进快退和倍速播放...

    前一篇文章推荐过一个app,但那app没倍速播放功能.我又找到了一个更完美的app 安卓手机上我自己需要这样一款app,主要用来听电子书,知识音频等.需要能实现快进快退几秒钟的以及倍速播放功能.这功能 ...

  5. Android高级第九讲--JVM 与Android Dalvik之间的异同

    博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved ! 有些东西不是不知道,是还没用到,所以才没去仔细了解,昨天被问及 ...

  6. Android中级第九讲--相机调焦

    博客出自:http://blog.csdn.net/liuxian13183,转载注明出处! All Rights Reserved ! 相机调焦:原理,使用竖直seekbar,根据用户拖拉来获得距离 ...

  7. python编程入门第九讲,第九讲作业---函数

    # 1.用函数实现判断用户输入的年份是否是闰年? def fn(): year = int(input('请随意输入一个年份:')) if year%400 == 0 or (year%4 == 0 ...

  8. python编程入门第九讲_python 基础 19 习题9 讲解

    第9次课编程题 梳理编程思路 1.把老虎的类建好 2.把羊的类建好 3.把房间的类建好 4.把老虎或羊放入房间 5.写游戏的相关代码 class Tiger: def init(self): self ...

  9. android json 解析图片路径,Android 使用Gson解析Asset 目录下的.json文件

    配合Rxjava,直接代码 Observable.create((ObservableOnSubscribe) e -> { StringBuilder stringBuilder = new ...

最新文章

  1. oracle集群图例
  2. 今晚直播 | 清华大学NLP组秦禹嘉:基于自然语言解释的数据增强
  3. 基于HTML5技术的电力3D监控应用(二)
  4. 【CodeForces - 558C】Amr and Chemistry(位运算,bfs,计数,思维,tricks)
  5. html如何设置三列列宽相等,CSS分割宽度100%到3列
  6. oc代码混淆_OC代码混淆工具
  7. IEEE 研究类型 小木虫
  8. 痛与快乐有一个代码是什么_痛与快乐有一个代码是什么_痛苦与快乐
  9. 微信公众号前端html,微信公众号开发(前端)
  10. C#监控设备(PLC)状态仿真模拟器
  11. Youtube——如何将视频中的英文字幕转换成中文字幕
  12. 终端不需要主机的服务器,要实现云桌面需要哪些硬件?云终端必不可少
  13. 设置表格单元格的背景颜色
  14. 恢复PyCharm顶部菜单栏
  15. 接口文档编辑工具+接口文档编写
  16. python getA() 函数
  17. 5-ipv6服务器之-dns
  18. found duplicated code in this file
  19. 【程序设计】浅拷贝与深拷贝
  20. 谷歌员工年薪中位数近190万元!科技公司年薪排行,哪家强?

热门文章

  1. java计算机毕业设计Vue垃圾分类指南平台设计与实现源码+数据库+系统+lw文档
  2. linux无法运行sssverify,Synopsys Design Compiler在fedora Core 9下面的安装
  3. 多台路由器,不同网段的设备之间如何互访?
  4. html5 运动轨迹绘画,冷知识|简单几步教你用跑步轨迹绘画,用跑画刷爆你的朋友圈!...
  5. ubuntu18.04 安装软件中心(software-center)
  6. 怎样记账才能清楚、简单
  7. 汽车之家精选论坛图片下载
  8. (2019春)软件构造:雨课堂试卷(第3章)
  9. ZOJ1516 Uncle Tom's Inherited Land(二分图最大匹配)
  10. getcount php,物联网方案之“Android+Apache服务器(PHP+Mysql)+Arduino(+以太网盾板)”(四.点播客户端)...