2013-12-08 108 views
3

後不久的Android 4.4出來了我的代碼已經正常工作,因爲2.2突然滅車。Android的MediaPlayer的錯誤(1,-2147483648)播放MP3時,本地

我的代碼將查詢音樂數據庫對於一個給定的音樂文件。該路徑查詢中返回,然後將此路徑傳遞到MediaPlayer的。

代碼:

String uri = "content://media/internal/audio/media"; 
String[] columns = [audio_id as _id, title, album, artist, album_id, _data]; 
String where = "album = 'XX'"; 
Cursor c = this.getContentResolver().query(uri, columns, where, null, MediaColumns.TITLE); 
String musicPath = c.getString(5); 
// musicPath is "/storage/emulated/0/Music/The XX/Islands.mp3" 

player.reset(); 
player.setDataSource(musicPath); 
player.setAudioStreamType(AudioManager.STREAM_MUSIC); 
player.prepareAsync(); 

我結束了無用的錯誤(1,-2147483648)消息,在我的logcat中。

我也試圖與

FileInputStream fileInputStream = new FileInputStream(musicPath); 
player.setDataSource(fileInputStream.getFD()); 
fileInputStream.close(); 

更換

player.setDataSource(musicPath); 

但這產生的新的FileInputStream一個FileNotFoundException異常(...):

java.io.FileNotFoundException :/存儲/模擬/ 0 /音樂/的xx/Islands.mp3:打開失敗:EACCES(拒絕)

這很有趣,因爲查詢返回的路徑開頭「/存儲/模擬/ ......」但如果我看在Eclipse中的DDMS視圖中的實際路徑是「到/ mnt /殼/模擬/ ... 」。這是正常的嗎?

儘管如此,如果我改變了路徑前綴手動我在文件瀏覽器看到,我還是得到了新的FileInputStream一個FileNotFoundException異常(...):

java.io.FileNotFoundException:/ mnt/shell/emulated/0/Music/XX/Islands.mp3:打開失敗:EACCES(權限被拒絕)

同樣的例外。什麼是這個權限被拒絕的業務?直到KitKat它工作正常。我也因爲增加了權限:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 

我的應用程序有這條線在清單:

<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" /> 

有沒有人似乎類似的東西,並找到了解決這個未知的錯誤?我試圖在播放音樂和其他音樂播放器應用程序來播放做工精細的MP3歌曲,從而導致我相信這個問題是不缺少的編解碼器。

感謝 肖恩

編輯: 我立刻內容的查詢後,如果該文件存在檢查,返回的路徑沒有。

File f = new File(musicPath); 
boolean exists = f.exists(); // false 

這怎麼可能?我試着查詢內部媒體,而不是但不返回任何結果(如預期)

回答

0

我解決此得到了與添加寫權限的應用程序的(不幸的)解決方案。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 

顯然這是必要的從4.4開始。任何人都可以證實或否認這一點?

肖恩

相關問題