我创建了一个用户可以打开并上传视频文件的应用程序。它运作良好,但几周前有人报告说他的三星手机(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。