在不创建新实例的情况下设置(Android)MediaPlayer的源代码

时间:2014-07-02 17:20:48

标签: android media-player android-mediaplayer

是否可以设置源(来自位于原始文件夹中的文件)。

我知道我们可以这样做:

    myPlayer = MediaPlayer.create(context, R.raw.tune);

但实际上是否可以在不创建新实例的情况下设置它?

我知道有一些 setDataSource 方法,但我无法通过位于我项目的RAW文件夹中的文件ID来解决这个问题。

我已经尝试了一些我在其他问题中看到过的建议,但它们似乎并不适合我。

感谢任何建议

3 个答案:

答案 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);

播放它!

玩得开心!