1

尝试播放位于 R.raw 中的视频。我有一个 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 uriParse = "android.resource://" + getPackageName() +"/R.raw." + getResources().getResourceEntryName(xmlArr.getResourceId(intVideoToPlay));
myVideoView.setVideoURI(Uri.parse(uriParse));
myVideoView.setMediaController(new MediaController(this));
myVideoView.requestFocus();
myVideoView.start();

我的 xml 数组如下所示:

string-array name="arrTest"
item>@raw/test1 /item
item>@raw/test2 /item
item>@raw/test3 /item
/string-array
4

2 回答 2

0

扩展安迪·雷斯(非)的答案……他是对的,那行不通……但是“为什么”?

因为 R.raw.myvideo 是 R 类中的一个变量,它映射到某个数字(这是安迪正在谈论的你的 URI 正在寻找的整数)。

如果您想在运行时将该 String 转换为该 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){

}
于 2014-05-05T20:58:02.827 回答
0

因为R.raw.test实际上不是字符串,而是int您正在访问的资源的 id 的表示。(你可以在 LogCat 中打印它的值)
所以,getPackageName() +"/R.raw." + getResources().....不会工作。

于 2013-01-04T12:35:45.690 回答