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