2012-01-12 75 views
1

我正在嘗試使用媒體播放器類播放MP3。當我硬編碼的MP3資源它的工作原理,但我希望資源來自一個字符串,而不是直接訪問它像R.raw.mp3name將字符串轉換爲資源Uri進行MP3播放

Bundle bundle = getIntent().getExtras(); 
String Choice= bundle.getString("bundledChoice");   
Uri myUri = Uri.parse("R.raw." + Choice);   
mPlayer = MediaPlayer.create(activity.this, myUri); 
mPlayer.start(); 

如果我改變了倒數第二行以mPlayer = MediaPlayer.create(activity.this, R.raw.song)它會工作,問題是從一個從包取得的字符串創建資源URI動態。

請指教。

+0

我想「使用字符串如何引用資源@ R.raw ......」 – brux 2012-01-12 13:08:05

+0

資源在R.raw在它創建R類的編制提出把它是一個更好的方法資源的ID。 URI.parse()需要 符合RFC 2396的編碼URI參數。 R.raw.song是這首歌的int ID。你可能想讀這樣的東西http://stackoverflow.com/questions/559902/android-how-can-i-convert-android-net-uri-object-to-java-net-uri-object並檢查如何從File對象創建一個Uri。謝謝 – 2012-01-12 13:45:44

+0

在這裏http:// stackoverflow。com/questions/3004713/get-content-uri-from-file-path-in-android – 2012-01-12 14:00:35

回答

5

我正在使用這個小挑戰的解決方案是基於@ Creator對此帖子的回答:Android - getting an image resource into Uri: IllegalArgumentException

的解決方案是使用

Uri uri = Uri.parse("android.resource://[package]/[res type]/[res name]"); 

[包]你要麼知道(com.company.blah.superdooperthing),或者可以使用getPackageName()來確定。

[res類型]是(我認爲,它似乎工作)內的「res」目錄中,你從中拉動資源。因此,對於音頻文件.../res/raw/nicemusic.mp3,res將是「原始的」。

[資源名稱]是(我認爲,它似乎工作)資源的文件名(較小的擴展名)。所以,對於上面的例子,這將是「nicemusic」。

所以,一個更系統的方法可能是:

String dataResourceDirectory = "raw"; 
String dataResoruceFilename = "nicemusic"; 

Uri uri=Uri.parse("android.resource://" + getPackageName() + "/" + 
        dataResourceDirectory + "/" + dataResoruceFilename); 

更好的解決方案的歡迎!

+0

+1,很好的答案。 – dreamcrash 2013-04-06 18:46:15

-1

你正在試圖將文字字符串R.raw.xyz變成一個URI。 你真正想要的是首先將R.war.xyz解析成一個字符串,然後把它變成一個Uri。 有例如Context.getString()爲此目的。

-1

試試這個:

Bundle bundle = getIntent().getExtras(); 
    String choice= blabla// your solution to get song name 
    String debug = "R.raw." + choice; 
    Uri myUri = Uri.parse(debug);   
    mPlayer = MediaPlayer.create(activity.this, myUri); 
    mPlayer.start(); 
+0

只是將R.raw ...重構成一個變量在這裏沒有幫助。 – 2012-01-12 11:01:23

+0

我試過這個,我仍然得到一個NPE – brux 2012-01-12 11:03:45

2

您是否嘗試過做這樣?

MediaPlayer mp = new MediaPlayer(); 
mp.setDataSource(path+"/"+fileName); 

希望這有助於

1

我發現this solution這是非常簡單的工作(對我來說),我用Uri.parse()嘗試的所有東西都不起作用。

private void playMp3(String nameOfFile){ 
    MediaPlayer mPlayer = MediaPlayer.create(this, getResources().getIdentifier(nameOfFile, "raw", getPackageName())); 
    mPlayer.start(); 
}