Android setVideoUri(uri.parse(res))错误
正在尝试播放位于R.raw中的视频。我有一个xml数组,用于获取要播放的文件。如果我对视频进行硬编码,视频效果很好,如下所示:Android setVideoUri(uri.parse(res))错误,android,resources,android-videoview,Android,Resources,Android Videoview,正在尝试播放位于R.raw中的视频。我有一个xml数组,用于获取要播放的文件。如果我对视频进行硬编码,视频效果很好,如下所示: VideoView myVideoView = (VideoView)findViewById(R.id.videoview0); myVideoView.setVideoURI(Uri.parse("android.resource://" + getPackageName()+"/"+R.raw.test)); myVideoView.setMediaControl
VideoView myVideoView = (VideoView)findViewById(R.id.videoview0);
myVideoView.setVideoURI(Uri.parse("android.resource://" + getPackageName()+"/"+R.raw.test));
myVideoView.setMediaController(new MediaController(this));
myVideoView.requestFocus();
myVideoView.start();
string-array name="arrTest"
item>@raw/test1 /item
item>@raw/test2 /item
item>@raw/test3 /item
/string-array
但是,如果我从阵列中获取视频,我的错误侦听器集和视频将不会播放。解析的字符串与上述内容完全相同。我就是这样做的(为简单起见修改了代码):
我的xml数组如下所示:
VideoView myVideoView = (VideoView)findViewById(R.id.videoview0);
myVideoView.setVideoURI(Uri.parse("android.resource://" + getPackageName()+"/"+R.raw.test));
myVideoView.setMediaController(new MediaController(this));
myVideoView.requestFocus();
myVideoView.start();
string-array name="arrTest"
item>@raw/test1 /item
item>@raw/test2 /item
item>@raw/test3 /item
/string-array
因为
R.raw.test
实际上不是字符串,而是您正在访问的资源id的int
表示。(您可以在LogCat中打印其值)因此,
getPackageName()+“/R.raw.+getResources()…
不起作用。扩展Andy Res的(非)答案。。。他是对的,那是行不通的。。。但“为什么”
因为R.raw.myvideo是R类中的一个变量,它映射到某个数字(即Andy所说的URI要查找的int)
如果您想在运行时将该字符串转换为该int,下面是您的操作方法
@SuppressWarnings("rawtypes")
public static int getResourceId(String name, Class resType){
try {
return resType.getField(name).getInt(null);
}
catch (Exception e) {
// Log.d(TAG, "Failure to get drawable id.", e);
}
return 0;
}
int resId = getResourceId(
getResources().getResourceEntryName(xmlArr.getResourceId(intVideoToPlay))
, R.raw.class); //this will be 0 if it can't find the String in the raw class or the relevant id
//keep in mind that I have no idea if your xmlArr method is valid... make sure to log what it's returning to verify that you're getting the String you're expecting from it
try{
String uriParse = "android.resource://" + getPackageName() +"/" + resId;
//... now you can use your uriParse as you do above.
}catch(Exception e){
}