是否可以设置源(来自位于原始文件夹中的文件)。
我知道我们可以这样做:
myPlayer = MediaPlayer.create(context, R.raw.tune);
但实际上是否可以在不创建新实例的情况下设置它?
我知道有一些 setDataSource 方法,但我无法通过位于我项目的RAW文件夹中的文件ID来解决这个问题。
我已经尝试了一些我在其他问题中看到过的建议,但它们似乎并不适合我。
感谢任何建议
答案 0 :(得分:1)
这是使用MediaPlayer:
的方法Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(getApplicationContext(), myUri);
mediaPlayer.prepare();
mediaPlayer.start();
答案 1 :(得分:0)
找到它。
所以,像这样创建一次MediaPlayer对象:
myPlayer = new MediaPlayer();
然后设置原始资源:
myPlayer.setDataSource(context, Uri.parse("android.resource://com.app.name/" + R.raw.filename));
mPlayer.prepare();
您必须使用try / catch包围上述内容。
答案 2 :(得分:0)
这是我在LogCat
中搜索其他问题后找到的最佳方法MediaPlayer mp;
mp = MediaPlayer.create(context, R.raw.sound_one);
mp.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
// TODO Auto-generated method stub
mp.reset();
mp.release();
mp=null;
}
});
mp.start();
不发布媒体播放器会在LogCat中显示此错误:
Android:MediaPlayer未经发布而最终确定
不重置媒体播放器会在LogCat中显示此错误:
Android:mediaplayer因未处理的事件而离开
因此,请使用安全且简单的代码来使用媒体播放器。
要在同一个活动/片段中播放多个声音,只需在创建新媒体播放器时更改resID,例如
mp = MediaPlayer.create(context,R.raw.sound_two);
播放它!
玩得开心!