2012-01-12 73 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(); 
}