我正在尝试使用媒体播放器类播放 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这是从包中获得的。
请指教。
最佳答案
我对这个小挑战使用的解决方案是基于@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);
欢迎更好的解决方案!
关于java - 将字符串转换为资源Uri,用于mp3播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8833772/