将字符串转换为资源Uri以进行mp3播放

时间:2012-01-12 10:47:39

标签: java android

我正在尝试使用媒体播放器类播放mp3。当我对它的mp3资源进行硬编码时,我希望资源来自字符串,而不是像R.raw.mp3name那样直接访问它。

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。

请告知。

6 个答案:

答案 0 :(得分:5)

我正在使用这个小挑战的解决方案是基于@ Creator对这篇文章的回答:Android - getting an image resource into Uri: IllegalArgumentException

解决方案是使用

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

[package]你知道(com.company.blah.superdooperthing),或者可以使用getPackageName()来确定。

[res type]是(我认为,似乎工作)你从中提取资源的“res”里面的目录。因此,对于音频文件... / res / raw / nicemusic.mp3,res将是“原始”。

[res name]是(我认为,似乎工作)资源的文件名(扩展名较少)。因此,对于上面的例子,它将是“nicemusic”。

因此,更系统的方法可能是:

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

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

欢迎更好的解决方案!

答案 1 :(得分:2)

你试过这样做吗?

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

希望这会有所帮助

答案 2 :(得分:1)

我发现this solution非常简单且适用(对我来说),我尝试使用Uri.parse()的所有内容都不起作用。

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

答案 3 :(得分:0)

答案可以在这里找到。解析资源的int ID有助于:Android findViewbyId with a variant string

答案 4 :(得分:-1)

您尝试将文字字符串R.raw.xyz转换为URI。 你真正想要的是首先将R.war.xyz解析为一个字符串,然后将其转换为一个Uri。 例如有为此目的Context.getString()

答案 5 :(得分:-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();