Android(存储访问框架)以3gpp格式打开mp4视频

时间:2017-09-26 19:01:44

标签: android video mp4 samsung-mobile

我创建了一个用户可以打开并上传视频文件的应用程序。它运作良好,但几周前有人报告说他的三星手机(Android 7)以3gpp格式打开视频。但在文件浏览器中,视频显示其格式为mp4,例如Gmail也会以mp4格式打开它。

我的调试可能性有限,因为我只有一台ZTE v5 Redbull(Android 4.4.2),所以我使用了三星远程测试实验室(http://developer.samsung.com/remotetestlab/rtlDeviceList.action)。在我的设备中,我无法重现此问题。

我按照此说明介绍了如何获取所选文件的内容URI以及如何打开它们。 https://developer.android.com/guide/topics/providers/document-provider.html

据我所知,不建议将内容URI(content:// ...)转换为真实文件路径(file:// ...),但我也尝试了基于此的解决方案: https://stackoverflow.com/a/27271131/7539161 它有时有效但并非在所有情况下都有效。应用程序有时找不到路径。但是当它找到路径时,文件有mp4格式,一切都很好。似乎推荐的Storage Access Framework不会在三星手机上以mp4格式打开视频。

基于之前的想法,我尝试将文件从3gpp重命名为mp4,但它没有用。

这是启动文件选择器意图的方式:

public void startContentChooserIntent(){
    if (Build.VERSION.SDK_INT < 19){
        Intent intent = new Intent();
        intent.setType("*/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(intent, CHOOSE_CONTENT_ACTIVITY_REQUEST_CODE);
    } else {
        Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
        intent.addCategory(Intent.CATEGORY_OPENABLE);
        intent.setType("*/*");
        startActivityForResult(intent, CHOOSE_CONTENT_ACTIVITY_REQUEST_CODE);
    }
}

这是获取内容URI和扩展名的方式:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    switch (requestCode){
        case CHOOSE_CONTENT_ACTIVITY_REQUEST_CODE: {
            if (resultCode == RESULT_OK) {
                contentUri = data.getData();
                ContentResolver contentResolver = getContentResolver();
                MimeTypeMap mime = MimeTypeMap.getSingleton();
                String extension = mime.getExtensionFromMimeType(contentResolver.getType(contentUri));  // 3gpp instead of mp4
            }
        }
    }
}

它还要求在启动intent之前读取外部存储的权限:

public void chooseContent(){
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
            != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},
                CONTENT_CHOOSER_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE );
    } else {
        startContentChooserIntent();
    }
}

我没有想法,所以我希望有人有解决方案。有一个类似的问题,但没有答案:3gpp and mp4 on android

更新

我制作了两个截图,介绍了我试图用三星手机打开的视频属性。请查看以下评论​​以获取链接。

在应用程序中,已打开视频的MIME类型为video / 3gpp。

0 个答案:

没有答案