android – 从内容uri获取所拍摄视频的文件

我有一个方法如下:

private String getRealPathFromUriForVideos(Uri selectedVideoUri) {
    String wholeID = DocumentsContract.getDocumentId(selectedVideoUri);
    String id = wholeID.split(":")[1];

    String[] column = { MediaStore.Video.Media.DATA };
    String sel = MediaStore.Video.Media._ID + "=?";
    Cursor cursor = getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,column,sel,new String[]{ id },null);
    String filePath = "";

    int columnIndex = cursor.getColumnIndex(column[0]);
    if (cursor.movetoFirst()) {
        filePath = cursor.getString(columnIndex);
    }
    cursor.close();
    return filePath;
}

这可以很好地获取用户选择的视频文件.但是,我想让用户也可以创建新视频(来自我的应用),然后从那里获取URI和文件.新创建的视频的URI是:content:// media / external / video / media / 41.对于选定的视频,如内容://com.android.providers.media.documents/document/video:42.

它适用于第二个,但不适用于第一个.第一个我得到IllegalArgumentException,因为它不是文档URI.如何从第一个URI获取文件

解决方法

This works just fine getting the file for videos that hte user selects

它可能在少数情况下有效.它一般不起作用.你从ACTION_OPEN_DOCUMENT这样的东西获得的Uri不必代表一个文件,更不用说你可以通过文件系统访问的文件,更不用说这个脚本小子算法允许你访问的文件了.

The URI for newly created videos is: content://media/external/video/media/41

不必要.我想有一种方法可以让你为录制的视频获得类似的Uri,虽然我无法想到推荐的方式会给你这样的Uri.如果您使用的是MediaRecorder或ACTION_VIDEO_CAPTURE,则可以创建自己的文件(对于ACTION_VIDEO_CAPTURE,您可以创建自己的文件Uri).而且,如果您要创建自己的文件,则可以知道该文件的位置.

Need to be able to upload to my server

对于视频,记录到您控制的文件,然后使用该文件.

使用一些允许您从Uri或InputStream上传的库.除此以外:

>使用ContentResolver和openFileinput()在Uri表示的内容获取InputStream
>在您控制的某个文件上创建FileOutputStream(例如,在getCacheDir()中)
>将内容从InputStream复制到OutputStream
>使用您的副本进行上传
>完成工作后删除副本

您将外部Uri视为Web服务器的URL:流式传输内容.

相关文章

Android性能优化——之控件的优化 前面讲了图像的优化,接下...
前言 上一篇已经讲了如何实现textView中粗字体效果,里面主要...
最近项目重构,涉及到了数据库和文件下载,发现GreenDao这个...
WebView加载页面的两种方式 一、加载网络页面 加载网络页面,...
给APP全局设置字体主要分为两个方面来介绍 一、给原生界面设...
前言 最近UI大牛出了一版新的效果图,按照IOS的效果做的,页...