2016-12-16 50 views
2

我試着讓用戶打開一個音頻文件並播放這個文件。但是,MediaPlayer.create()方法返回null。這裏是我的代碼:android:mediaplayer.create()返回null

MediaPlayer mediaPlayer; 

public void start(View v) { 
    Intent intent = new Intent(Intent.ACTION_GET_CONTENT); 
    intent.setType("audio/*"); 
    startActivityForResult(intent,1); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if(resultCode == RESULT_OK) { 
     Uri uri = data.getData(); 
     mediaPlayer = MediaPlayer.create(this,uri); 
     //startThread(); 
     mediaPlayer.start(); 
    } else { 
     mediaPlayer.start(); 
    } 
} 

我試過用mp3文件,我的設備沒有問題與其他玩家玩。 Uri我看起來像這樣"content://media/external/audio/media/137650" 我在做什麼錯了?

+0

create()API如果以某種方式失敗,則返回null。 在這種情況下,原因是由於損壞的MP3文件。你嘗試過不同的文件嗎? –

+1

確保您具有'READ_EXTERNAL_STORAGE'權限。這反過來又要求您申請運行時權限,如果您的'targetSdkVersion'爲23或更高,並且您正在測試Android 6.0或更高版本。您也可以檢查LogCat中是否有任何相關消息,因爲「MediaPlayer」傾向於在警告嚴重性的情況下記錄東西並且不會拋出異常。另外,不要在你的'else'塊中調用'mediaPlayer.start()',因爲你還沒有初始化'mediaPlayer'。 – CommonsWare

+0

是的,正如我所說,其他玩家可以播放這些文件。他們肯定沒有腐敗 – Ginso

回答

0

嘗試用下面的代碼:

MediaPlayer mPlayer = new MediaPlayer(); 
mPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
mPlayer.setDataSource(getApplicationContext(), uri); 
mPlayer.prepare(); 
mPlayer.start(); 
0

這發生在我一次錯誤是無法創建的媒體,這是這是造成錯誤文件的.wav當我用MP3播放錯誤是文件不在

+0

這與問題有什麼關係(OP沒有那個錯誤 - 他們得到一個'null'!) –

+0

'mediaPlayer = MediaPlayer.create(this,uri);'這行產生的錯誤是因爲在這種情況下從uri獲得的文件格式。所以在這行之後,如果你做'mediaPlayer.start()'這將產生空的異常......所以我的意思是文件格式是這個異常背後的核心問題,至少對於我的情況 – Tabish

+0

這部分是爲了添加一個答案OP的問題,不是用你的代碼描述問題,而是你如何修復它! –