java - 将字符串转换为资源Uri,用于mp3播放

标签 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这是从包中获得的。

请指教。

最佳答案

我对这个小挑战使用的解决方案是基于@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/

相关文章:

java - Spring:使用 spring 的生命周期回调 'destroy-method' 比常规的 finalize() 方法有什么优势吗?

Java结果集行映射器

java - 如何检查测试套件在一个环境中运行缓慢的原因

java - 如何使用父实体的组合键进行 JPA @OneToMany 单向映射?

java - 通过 reports.query() 对 YouTubeAnalytics v2 API 进行请求会引发 400 错误

android - 折叠工具栏布局 : setShadowLayer

android - 使用arrayadapter向 ListView 动态添加项目

java - android saxparser 截断xml标签内容

android - 在Android中调试时如何将一堆数据传递到我的电脑?

Android-如何在矢量图上实现中心比例动画