无法通过意图播放视频

时间:2015-12-30 17:39:20

标签: android android-intent video apk-expansion-files

我的应用有一个照片库,可以显示常量的图像列表。我需要在该列表中添加一个视频(只有一个,由我提供)。此视频位于扩展文件中。我想让用户决定他想用来播放视频的视频播放器。所以我采用了 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();
}

但这并不是我想要的,我真的想让用户选择他喜欢的视频播放器。主要是因为我想让自己摆脱编写一个好看的视频播放器的责任。

1 个答案:

答案 0 :(得分:1)

我认为问题不在于代码中的任何地方。或者,如果确实如此,那不是你最大的问题。

我认为你最大的问题是使用3GP文件。所有设备都不支持该格式。使用MP4你会更好。即便如此,请确保使用所有Android设备都能理解的编解码器进行编码。