我正在尝试使用媒体播放器类播放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。
请告知。
答案 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()来确定。
因此,更系统的方法可能是:
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();