我是靠谱客的博主 大意小鸽子,这篇文章主要介绍【Android】 使用 MediaPlayer 播放声音,现在分享给大家,希望可以做个参考。

前言:
使用MediaPlayer调用raw文件夹里面的声音。

1.创建MediaPlayer

复制代码
1
2
MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.ring);

因为是用这种 MediaPlayer.create 方式创建的,所以不需要调用 prepare 方法。

需要播放声音时:

复制代码
1
2
mediaPlayer.start();

当需要重复播放声音时:

复制代码
1
2
3
4
5
6
7
8
//设置循环播放 mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mediaPlayer.start(); } });

需要暂停播放声音时:

复制代码
1
2
mediaPlayer.pause();

需要停止播放声音时:

复制代码
1
2
mediaPlayer.stop();

当我们首次播放声音时,不需要 prepare ,但是当需要再次播放时,需要先 prepare 才能使用,一般会在 start 之前或者 stop 方法之后调用 prepare 方法。我比较喜欢在 stop 之后调用 prepare方法。

复制代码
1
2
3
4
5
6
try { mediaPlayer.prepare(); } catch (IOException e) { e.printStackTrace(); }

有时候我们需要判断声音是否在播放中,当处于播放状态时,停止播放声音,MediaPlayer 提供了 isPlaying 方法来判断是否在播放状态。

复制代码
1
2
mediaPlayer.isPlaying()

但是在使用此方法的时候,经常会出现明明在播放声音,但是 isPlaying 方法返回 false的情况。
这是因为 isPlaying 是异步方法,如果频繁的调用 start 和 stop 方法,就会出现上述问题。
解决办法:
我们自己定义一个 boolean 变量:

复制代码
1
2
private boolean isPlayingRing = false;

在需要使用的时候:

复制代码
1
2
3
4
5
6
7
8
9
10
if (isPlayingRing || mediaPlayer.isPlaying()) { mediaPlayer.stop(); isPlayingRing = false; try { mediaPlayer.prepare(); } catch (IOException e) { e.printStackTrace(); } }

有时候我们会遇到这类错误

复制代码
1
2
3
Error (-38, 0) stop called in state 0

解决方式:

复制代码
1
2
3
4
5
6
7
8
mediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { @Override public boolean onError(MediaPlayer mp, int what, int extra) { mediaPlayer.reset(); return true; } });

当 MediaPlayer 不使用的时候,需要进行释放,避免内存泄漏,之后 mediaPlayer 的方法都不会在起作用了。一般在 onDestroy 方法中释放。

复制代码
1
2
3
4
5
6
7
8
@Override protected void onDestroy() { super.onDestroy(); if (mediaPlayer != null) { mediaPlayer.release(); } }

最后

以上就是大意小鸽子最近收集整理的关于【Android】 使用 MediaPlayer 播放声音的全部内容,更多相关【Android】内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(51)

评论列表共有 0 条评论

立即
投稿
返回
顶部