我的应用程序有一个照片库,显示一个恒定的图像列表 . 我需要在该列表中添加一个 video (只有一个,由我提供) . 此视频位于 expansion file 内 . 我想让用户决定他想用来播放视频的视频播放器 . 所以我选择了 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
,因为扩展文件版本与应用程序版本代码不同 .
我知道该文件正在被找到,但视频播放器无法播放 . They are launching the can't play this video window (并且没有错误) . 我在很多设备和不同类型的视频上测试过它 . 3gp视频I 'm using to test can be played just fine from the phone' s原生画廊 .
playVideo
方法的第3行正在打印此内容
content://com.myapp.package.provider/test.3gp
这是对的,对吗?
扩展文件没有文件夹,文件只是以root身份抛出 .
另外,我实际上需要从 patch 扩展文件中播放这个 test.3gp
视频 . 那种情况会有什么不同吗?我'm eliminating this obstacle for now. I know I should add it to the provider'的元数据 .
一些额外的信息:扩展文件有几个音频文件,我可以使用 MediaPlayer
播放没有任何问题 . 当然,这是不同的,因为在这种情况下我通过获取 AssetFileDescriptor
到obb扩展文件中的文件来实现它,而对于视频我需要一个 Uri
,这会改变一切 .
我读了很多类似问题的问题,但是没有用 . 有没有人有同样的问题?
也欢迎解决方法 . 例如,如果需要,我可以接受使用 VideoView
.
UPDATE
我刚刚意识到视频播放器无法工作,即使该文件是资源(内部可绘制,原始或其他) . 我确实设法使用以下代码播放视频:
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();
}
但这并不是我想要的,我真的想让用户选择他喜欢的视频播放器 . 主要是因为我想让自己摆脱编写一个看起来很好看的视频播放器的责任 .
1 回答
我不认为问题出在你的代码中的任何地方 . 或者,如果确实如此,那不是你最大的问题 .
我认为你最大的问题是使用3GP文件 . 所有设备都不支持该格式 . 使用MP4你会更好 . 即便如此,请确保使用所有Android设备都能理解的CODEC进行编码 .