微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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:流式传输内容.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐