Android Java编程Uri.parse(字符串)vs uri键入

时间:2013-03-07 23:34:38

标签: android parsing media-player uri

我搜索了这些主题,但我没有找到任何帮助。 我有这个问题。 当我使用像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错误,这可能是我的错误,但我不明白为什么,我怎么能解决这个

4 个答案:

答案 0 :(得分:1)

R.java类是自动生成的,包含其他内部类,这些内部类表示随应用程序打包的不同资源类型,每个内部类包含代表资源的static final int字段。< / p>

举一个基本的例子。我的项目中的/res/values/strings.xml文件Stringapp_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";