【问题标题】:Android MediaPlayer prepare failed: status = 0x1 and Mediaplayer.creat() returns null with .AAC audio fileAndroid MediaPlayer 准备失败:status = 0x1 并且 Mediaplayer.creat() 使用 .AAC 音频文件返回 null
【发布时间】:2017-06-10 14:16:59
【问题描述】:

我正在访问来自

的音频文件

/data/user/0/app_packagename/files/filename

我没有 WRITE_EXTERNAL READ_EXTERNAL 权限。

现在我可以在没有WRITE_EXTERNAL READ_EXTERNAL 权限的情况下访问保存在/data/user/0/app_packagename/files/ 中的文件。

并且可以播放我的应用程序中的所有音频文件。

在我的应用程序中,我正在播放队列中的所有文件。第一个音频文件完成后,我的少数用户无法播放第二个音频文件。

下面是我的代码

void playNext(File varientFile) {
    if (mSessionMediaPlayer != null) {
        if (mSessionMediaPlayer.isPlaying()) {
            mSessionMediaPlayer.stop();
        }
        mSessionMediaPlayer.release();
        mSessionMediaPlayer = null;
    }
    mSessionMediaPlayer = new MediaPlayer();
    if (mSessionMediaPlayer != null) {
        Uri uri = Uri.parse(variantFile.getAbsolutePath());                  
     mSessionMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mSessionMediaPlayer.setDataSource(this, uri);      
        mSessionMediaPlayer.setLooping(false);
        mSessionMediaPlayer.prepare();
        mSessionMediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
            @Override
            public void onCompletion(MediaPlayer mediaPlayer) {
                       playNext(mFiles.get(mNextIndex);
            }
        });
        mSessionMediaPlayer.start();
        runScheduler();
    }
}

代替

mSessionMediaPlayer = new MediaPlayer();

我试过了

mSessionMediaPlayer = MediaPlayer.create(getApplicationContext(), uri);

即使MediaPlayer.create() 也在返回null。 mSessionMediaPlayer.prepare() 正在抛出异常

原因:准备失败。:status=0x1

我的代码有什么问题?为什么会得到null 或prepare failed?我已经测试了文件以及它们是否正常工作,音频文件格式为.aac。

无法播放第二个音频文件的同一用户。他能够使用相同的代码播放第一个文件。但是,如果从 onCompleted() 调用相同的方法,则它不起作用。为什么这样?

谁能帮我解决这个问题?

【问题讨论】:

    标签: android android-mediaplayer aac


    【解决方案1】:

    不要每次都创建一个新对象,而是尝试使用类似这样的相同媒体播放器对象。

    MediaPlayer mSessionMediaPlayer;
    mSessionMediaPlayer = MediaPlayer.create(getApplicationContext(),uri);
    mSessionMediaPlayer.setOnCompletionListener(new OnCompletionListener() {
    
        public void onCompletion(MediaPlayer mSessionMediaPlayer) {
           moveToNext(mSessionMediaPlayer,nextUri);
        }
    
    });
    mSessionMediaPlayer.prepare();
    mSessionMediaPlayer.start();
    
    
    
    private void moveToNext(MediaPlayer mSessionMediaPlayer,Uri uri){
         mSessionMediaPlayer.create(getApplicationContext(), uri);
         mSessionMediaPlayer.prepare();
         mSessionMediaPlayer.start();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多