我的应用有一个照片库,可以显示常量的图像列表。我需要在该列表中添加一个视频(只有一个,由我提供)。此视频位于扩展文件中。我想让用户决定他想用来播放视频的视频播放器。所以我采用了 intent 方法:
public void playVideo(View view){
Intent videoint = new Intent(Intent.ACTION_VIEW);
Uri uri = CustomAPEZProvider.buildUri("test.3gp");
Log.d("TEST", uri.toString());
videoint.setDataAndType(uri, "video/*");
startActivity(videoint);
}
我的CustomAPEZProvider
如下:
public class CustomAPEZProvider extends APEZProvider {
private static final String AUTHORITY = "com.myapp.package.provider";
@Override
public String getAuthority() {
return AUTHORITY;
}
public static Uri buildUri(String path) {
StringBuilder contentPath = new StringBuilder("content://");
contentPath.append(AUTHORITY);
contentPath.append(File.separator);
contentPath.append(path);
return Uri.parse(contentPath.toString());
}
}
另外,我将此添加到我的清单中:
<provider android:name="com.myapp.package.CustomAPEZProvider"
android:authorities="com.myapp.package.provider" >
android:exported="true"
android:multiprocess="true">
<meta-data
android:name="mainVersion"
android:value="4"/>
</provider>
provider
有此meta-data
,因为扩展文件版本与应用版本代码不同。
我知道该文件正在被找到,但视频播放器无法播放。 他们正在启动无法播放此视频窗口(并且没有错误)。我在很多设备和不同类型的视频上测试过它。我用来测试的3gp视频可以在手机的原生图库中播放。
playVideo
方法的第3行正在打印此
内容://com.myapp.package.provider/test.3gp
这是对的,对吧?
扩展文件没有文件夹,文件只是在root用户处抛出。
另外,我实际上需要从修补程序扩展文件中播放此test.3gp
视频。那种情况会有什么不同吗?我现在正在消除这个障碍。我知道我应该将它添加到提供商的元数据中。
一些额外的信息:扩展文件有几个音频文件,我可以使用MediaPlayer
播放没有任何问题。当然,这是不同的,因为在这种情况下,我通过获取AssetFileDescriptor
到obb扩展文件中的文件来做到这一点,而对于视频,我需要一个Uri
,这会改变一切
我读了很多类似问题的问题,但是没有用。有没有人有同样的问题?
也欢迎变通方法。例如,如果需要,我可以接受使用VideoView
。
更新
我刚刚意识到视频播放器无法正常工作,即使该文件是资源(可绘制内容,原始内容或其他内容)。我确实设法使用以下代码播放视频:
public void playVideo(View view){
Uri uri = CustomAPEZProvider.buildUri("test.3gp");
getWindow().setFormat(PixelFormat.TRANSLUCENT);
VideoView videoHolder = new VideoView(this);
videoHolder.setMediaController(new MediaController(this));
videoHolder.setVideoURI(uri);
setContentView(videoHolder);
videoHolder.start();
}
但这并不是我想要的,我真的想让用户选择他喜欢的视频播放器。主要是因为我想让自己摆脱编写一个好看的视频播放器的责任。
答案 0 :(得分:1)
我认为问题不在于代码中的任何地方。或者,如果确实如此,那不是你最大的问题。
我认为你最大的问题是使用3GP文件。所有设备都不支持该格式。使用MP4你会更好。即便如此,请确保使用所有Android设备都能理解的编解码器进行编码。