首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MediaPlayer出错

MediaPlayer出错
EN

Stack Overflow用户
提问于 2012-08-23 04:22:16
回答 3查看 1.2K关注 0票数 0

我正在尝试在我的应用程序中播放音乐,并在第一个应用程序完成后播放一首歌曲,但我收到一些错误,我无法解决任何帮助?

代码语言:javascript
复制
public class Music {
    int count;
    String[] titles = new String[] { "title1.mp3", "title2.mp3", "title3.mp3", "title4.mp3" };

    public void GameMusic(){
        count = 0;
        MediaPlayer mp = MediaPlayer.create(this, R.raw.title1);
        mp.start();
    }

    void onCompletion(MediaPlayer mp){
        mp.stop();
        if (count == titles.length -1) {
            count = 0;
        }
        mp.setDataSource(titles[count]);
        count++;
        mp.prepare(); 
        mp.start();
    }
}

错误为on:

代码语言:javascript
复制
    MediaPlayer mp = MediaPlayer.create(this, R.raw.music); 

( MediaPlayer类型中的create(Context,int)方法不适用于参数(音乐,int)

代码语言:javascript
复制
    mp.setDataSource(titles[count]);

(未处理的异常类型IOException)

代码语言:javascript
复制
    mp.prepare();

(未处理的异常类型IOException)

任何帮助都将不胜感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-23 04:28:04

这些错误可能有点神秘,但它们是不言而喻的。

您需要将上下文传递给GameMusic()并使用它来初始化MediaPlayer:

代码语言:javascript
复制
public void GameMusic(Context context){
    count = 0;
    MediaPlayer mp = MediaPlayer.create(context, R.raw.title1);
    mp.start();
}

this仅在类(在本例中为音乐)扩展上下文时才起作用,因此您需要以另一种方式提供上下文。

在onCompletion()中,使用try-catch块来处理IOException:

代码语言:javascript
复制
try {
    mp.setDataSource(titles[count]);
    count++;
    mp.prepare(); 
    mp.start();
}
catch(IOException e) {
    // Do something when MediaPlayer fails
}
票数 1
EN

Stack Overflow用户

发布于 2012-08-23 04:34:37

您的音乐类只是一个类,而不是活动,因此this传递的是一个对象,而不是context。如果这是你唯一的音乐播放器类,那么你需要它来扩展Activity,否则你需要向它传递一个上下文。

代码语言:javascript
复制
public void GameMusic(Context context){
count = 0;
MediaPlayer mp = MediaPlayer.create(context, R.raw.title1);
mp.start();
}

对于另外两个异常,它声明异常是未处理的。因此,您需要使用Try-Catch块来处理未捕获的IOException

这应该可以解决你现在得到的所有错误。

票数 1
EN

Stack Overflow用户

发布于 2012-08-23 20:33:47

将数据源设置为Mediaplayer时,请尝试使用音乐文件的绝对路径

如果它存储在SD卡中,则意味着..try

代码语言:javascript
复制
 String ExternalStorageDirectoryPath = Environment.getExternalStorageDirectory()
                                      .getAbsolutePath();

 mp.setDataSource(ExternalStorageDirectoryPath +"/"+titles[count]);

在调用mp.prepare()之后;

在收到通知后实现onpreparedlistner,然后启动mediaplayer

代码语言:javascript
复制
 @Override
 public void onPrepared(MediaPlayer mp) {
   mp.start();
 }

并处理所有类型的异常,这样您就可以轻松地跟踪问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12080809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档