Android中调用系统摄像并且保存到指定位置的一些问题&Uri转文件路径方法
2017-09-14 23:22
886 查看
首先是很基础的调用系统摄像头:
Intent i2 = new Intent(); // 指定开启系统摄像机的Action i2.setAction("android.media.action.VIDEO_CAPTURE"); i2.addCategory("android.intent.category.DEFAULT"); startActivityForResult(i2, 1);
这时候记住,不要用i2.putExtra(MediaStore.EXTRA_OUTPUT, uri),因为无论怎么传递参数,
在onActivityResult方法中intent.getExtras都是null值。
那么怎么办呢,debug发现intent中的data是有数据的,一个Uri值,大概长得是这个模样:
content://media/external/video/media/822330
于是上网搜索了一下Uri转为文件路径的方式,是M1ko的《Android Uri获取真实路径以及文件名的方法》
(网址是:http://blog.csdn.net/mikogodzd/article/details/50979653),这个方法很管用,可以直接用:
public static String getRealFilePath(final Context context, final Uri uri ) { if ( null == uri ) return null; final String scheme = uri.getScheme(); String data = null; if ( scheme == null ) data = uri.getPath(); else if ( ContentResolver.SCHEME_FILE.equals( scheme ) ) { data = uri.getPath(); } else if ( ContentResolver.SCHEME_CONTENT.equals( scheme ) ) { Cursor cursor = context.getContentResolver().query( uri, new String[] { MediaStore.Images.ImageColumns.DATA }, null, null, null ); if ( null != cursor ) { if ( cursor.moveToFirst() ) { int index = cursor.getColumnIndex( MediaStore.Images.ImageColumns.DATA ); if ( index > -1 ) { da4000ta = cursor.getString( index ); } } cursor.close(); } } return data; }
那么就可以在onActivityResult方法中进行判断之后加上以下代码就可以把拍摄的视频保存到指定位置了:
Uri uri = data.getData();String fn = getRealFilePath(MainActivity.this,uri);FileInputStream fis = new FileInputStream(fn.substring(1));// 创建文件夹String fileName = "/sdcard/Image/" + name + ".mp4";b = new FileOutputStream(fileName);byte[] buffer = new byte[1024];int len = 0;while ((len = fis.read(buffer)) != -1) { b.write(buffer, 0, len);}fis.close();
其中fn.substring(1)的作用是改善contains a path separator的错误,至此,拍摄的视频可以保存到指定位置了,
但是这个方法会导致出现两个一样的视频在不同的路径,是有点资源浪费的,还需要改进。
相关文章推荐
- Android调用系统Camera录像时不能指定保存路径的问题
- Android调用系统Camera录像时不能指定保存路径的问题
- 14、Android开发基础之通过系统提供的方法获取到保存文件的路径
- android调用系统相机的方法,并且解决三星手机遇到的问题,图片旋转、压缩
- 机房重构所遇问题"未能载入文件或程序集“DAL”或它的某一个依赖项。系统找不到指定的文件"的解决的方法集锦
- android调用系统文件浏览器获得uri或者文件路径
- android 调用系统相机,预置路径,解决小米等机型uri返回为null的问题
- Android调用系统相机拍照并保存到指定位置
- android调用自带文件选择器获取指定文件,编写解析Uri获取文件绝对路径
- Android基础--调用系统相机,打开相册,展示到界面,出现的一些问题Uri为空,data为null,图片错乱问题
- 解决VS编译出现Moc'ing文件,系统找不到指定路径问题
- android 获取一些系统指定路径的方法整理
- android 调用系统相机,预置路径,解决小米等机型uri返回为null的问题
- android开发中调用系统自带的文件选择器遇到的一些问题
- 解决Visual Studio编译出现Moc'ing文件,系统找不到指定路径问题
- android调用系统相机的方法,并且解决三星手机遇到的问题
- Android4.4以上系统根据Uri正确获取文件路径的方法
- android通过系统调用图片文件的Uri转换为绝对文件路径
- Android 调用系统相机拍照并且显示在相册中,以及中间可能会遇到的一些问题的解决
- spec文件中写上一些脚本,使生成的rpm包在安装前删除系统中指定文件的方法