我搜索了这些主题,但我没有找到任何帮助。 我有这个问题。 当我使用像MediaPlayer这样的东西时。
//This one is ok
mp.create(MainActivity.this,R.raw.something);
mp.start();
//This one drives me crazy
String a="R.raw.something"
Uri uriss=Uri.parse(a);
mp.create(MainActivity.this,uriss);
mp.start();
它让我失误(1,-2147483648) 这是错误的 MediaPlayer错误,这不是我的错误 媒体文件错误,这不是我的错误 FilePath错误,这可能是我的错误,但我不明白为什么,我怎么能解决这个
答案 0 :(得分:1)
R.java
类是自动生成的,包含其他内部类,这些内部类表示随应用程序打包的不同资源类型,每个内部类包含代表资源的static final int
字段。< / p>
举一个基本的例子。我的项目中的/res/values/strings.xml
文件String
为app_name
,即“MyApp”。在我的R.java
课程中,有一个内部课程如下......
public static final class string {
// Various resource identifiers
public static final int app_name=0x7f0a0038;
}
换句话说,R.string.app_name
实际上不是代表“MyApp”的String
,它是一个资源标识符,允许我的代码在运行时找到String
。
尝试执行String a = "R.raw.something";
基本上是尝试将int
分配给String
,但R.raw.something
周围的"R.raw.something"
将无法正常工作mp.create(MainActivity.this,R.raw.something);
实际上作为资源标识符毫无意义。
create(...)
工作的原因是因为int
方法将{{1}}作为其第二个参数,然后将其用作资源标识符来查找实际的原始资源。
答案 1 :(得分:0)
使用:
String path1 = "android.resource://[your package name]/[res type]/[res id]"
Uri uri1 = Uri.parse("android.resource://com.music.sample/raw/myMusic");
或
String path2 = "android.resource://[your package name]"
Uri uri2 = Uri.parse("android.resource://com.music.sample/" + R.raw.myMusic);
答案 2 :(得分:0)
在您的示例中,String
方法的Uri.parse
参数应该是符合RFC 2396的编码URI。请参阅http://developer.android.com/reference/android/net/Uri.html#parse(java.lang.String)。报告的错误对应于0x80000000
,这是未定义的错误。
答案 3 :(得分:-2)
“R.raw.something”对我来说看起来不像是一个有效的URI。你可能想要
String a = R.raw.something;
而不是
String a = "R.raw.something";