2017-07-06 103 views
0

我创造的MainActivity的onCreate一个MediaPlayer的实例()这样的Android的MediaPlayer的未知错误

MediaPlayer mPlayer = MediaPlayer.create(this, Uri.fromFile(new File("/storage/emulated/0/soundrecorder/My recording #26.wav"))); 

方法它是成功创建,但我得到这个错误:

07-06 18:33:44.266 18366-18366/com.audiorecorder.wel.voicerecorder E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0 
07-06 18:33:44.267 18366-18366/com.audiorecorder.wel.voicerecorder E/MediaPlayer-JNI: JNIMediaPlayerFactory: bIsQCMediaPlayerPresent 0 

也试过,但在logcat同样的错误:

MediaPlayer mp = new MediaPlayer(); 
    try { 
     mp.setDataSource(this, Uri.fromFile(new File("/storage/emulated/0/soundrecorder/My recording #26.wav"))); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    mp.prepareAsync(); 
    mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      mp.start(); 
     } 
    }); 

我已经尝试过不同格式的不同音频文件,但结果是同样的错误。我也尝试在stackoverflow上搜索答案,但无法解决问题。你能帮我解决吗?

+0

你运行它在设备或模拟器? –

+0

运行在摩托罗拉Moto G上运行牛轧糖7.1.1 – Ali

+0

我看到的一个问题就是歌曲文件名中的空格,请尝试删除它们。它可能会解决。 –

回答

0

看来你的文件存在一些问题。用此更新:

musicUri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;

,然后按照下列步骤操作:

1. getLoaderManager().initLoader(0,null,this); 
    2. @Override 
     public Loader<Cursor> onCreateLoader(int id, Bundle args) { 
      switch (id){ 
       case 0 : return new CursorLoader(getApplicationContext(),musicUri,null,null,null,null);   
      return new Loader<>(this); 
     } 

3. @Override 
    public void onLoadFinished(Loader<Cursor> loader, Cursor data) { 
     switch (loader.getId()) { 
      case 0 : 
       if(data != null && data.moveToFirst()) { 
        songTitleColumnIndex = data.getColumnIndex(MediaStore.Audio.Media.TITLE); 
        do { 
         songTitle = data.getString(songTitleColumnIndex); 
         songsList.add(songTitle); 
        } while (data.moveToNext()); 
       } 
       break; 

所以SongTitles正在落实这是字符串类型的ArraList的的SongList。

希望这有助于。

+0

为什么要将歌曲标题放入数组列表中? – Ali

+0

我只是维护一个SongTitles ArrayList,我将显示为我的设备中存在的歌曲列表。 –

+0

它会解决错误吗? – Ali

0

尝试使用一个FileInputStream开始与FileDescriptor的而不是你的MediaPlayer:

String yourFilePath = "/wherever/your/file/is.wav"; 

MediaPlayer mPlayer = new MediaPlayer(); 

try{ 
    FileInputStream inputStream = new FileInputStream(yourFilePath); 
    mPlayer.setDataSource(inputStream.getFD()); 
    inputStream.close(); 

    mPlayer.prepare(); 
    mPlayer.start(); 

}catch (IOException e){ 
    Log.e("IOException", e.getMessage()); 
} 
+0

仍然有这个错误http://imgur.com/a/cbwBJ – Ali