android调用相机录像保存并生成缩略图
16lz
2021-01-23
1.权限申请参考https://blog.csdn.net/chailongger/article/details/104833783
2.
private static final int TAKEVIDEO_FORESULT = 1001;private String videoPath;//视频保存后的路径/** * 调用相机录像 */private void takeVideo(){ Intent intent=new Intent(MediaStore.ACTION_VIDEO_CAPTURE); Uri fileUri; try { //fileUri=Uri.fromFile(createMediaFile());如果这样写会报错 fileUri= FileProvider.getUriForFile(getContext(),getActivity().getApplicationContext().getPackageName() + ".provider",createMediaFile());//这是正确的写法 intent.putExtra(MediaStore.EXTRA_OUTPUT,fileUri); Logs.i("fileUri "+fileUri.toString()); Logs.i("打开录像机"); } catch (IOException e) { e.printStackTrace(); } //质量 intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,1); //限制时长 intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 5); //限制大小 intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, 1024*1024*20L); startActivityForResult(intent,TAKEVIDEO_FORESULT);}@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if(requestCode == TAKEVIDEO_FORESULT && resultCode == -1){//resultCode == 0 时表示取消 Logs.i("调用相机录像并保存"); if(videoPath != null){ Logs.i("videoPath "+videoPath); //生成视频的缩略图 Bitmap bitmap = ThumbnailUtils.createVideoThumbnail(videoPath, MediaStore.Images.Thumbnails.MINI_KIND); videoPath = videoPath.replace("/storage/emulated/0",""); videoPath = videoPath.replace("Video","Camera"); videoPath = videoPath.replace(".mp4",".jpg"); Logs.i("filepath " +videoPath); File file = ConvertUtil.compressImage(bitmap,videoPath); getActivity().sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file))); ImageItem imageItem = new ImageItem(); imageItem.path = Environment.getExternalStorageDirectory()+videoPath; selImageList.add(imageItem); adapter.setImages(selImageList); }}//创建并保存视频的方法private File createMediaFile() throws IOException { if(checkSDCardAvaliable()) { if ((Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))) { // 选择自己的文件夹 String path = Environment.getExternalStorageDirectory().getPath() + "/DCIM/Video/"; File mediaStorageDir = new File(path); if (!mediaStorageDir.exists()) { if (!mediaStorageDir.mkdirs()) { Logs.i("文件夹创建失败"); return null; } } // 文件根据当前的时间给自己命名 SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd_HHmmss", Locale.CHINA); String imageFileName = "VID_" + dateFormat.format(new Date(System.currentTimeMillis())); String suffix = ".mp4"; Logs.i("path "+mediaStorageDir + File.separator + imageFileName + suffix); videoPath = mediaStorageDir + File.separator + imageFileName + suffix; File mediaFile = new File(mediaStorageDir + File.separator + imageFileName + suffix); return mediaFile; } } return null;}/** * 检查sd卡是否可用 * * @return */public static boolean checkSDCardAvaliable() { if (Environment.getExternalStorageState() == Environment.MEDIA_REMOVED) { return false; } return true;}
转换工具类
/** * 转换工具类 * 1. string转成bitmap * 2. bitmap转file */public class ConvertUtil { /** * string转成bitmap * * @param st */ public static Bitmap convertStringToIcon(String st) { Bitmap bitmap = null; try { // out = new FileOutputStream("/sdcard/aa.jpg"); byte[] bitmapArray; bitmapArray = Base64.decode(st, Base64.DEFAULT); bitmap = BitmapFactory.decodeByteArray(bitmapArray, 0, bitmapArray.length); // bitmap.compress(Bitmap.CompressFormat.PNG, 100, out); return bitmap; } catch (Exception e) { return null; } } public static File compressImage(Bitmap bitmap,String filepath) { //将要保存图片的路径filepath File file = new File(Environment.getExternalStorageDirectory(), filepath); try { BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(file)); bitmap.compress(Bitmap.CompressFormat.JPEG, 100, bos);// uploadPic(file); bos.flush(); bos.close(); } catch (IOException e) { e.printStackTrace(); } return file; }}
在applicationmanifest中添加fileprovider,android6.0以后读取或保存文件时需要用fileProvider进行转换。
provider_paths.xml
<?xml version="1.0" encoding="utf-8"?>
更多相关文章
- android通过Intent调用手机图片,音频,视频录音拍照等代码
- Android 获取屏幕截图 和保存到本地的sd卡路径下
- Windows下,Android Studio项目路径中包含中文字符无法编译的问题
- android--------根据文件路径加载指定文件
- 视频源
- 尚硅谷《全套Java、Android、HTML5前端视频》
- Android 使用意图录制视频
- android播放本地工程里的音乐和视频的方法
- 短视频带货源码,解决Dialog 不铺满屏幕问题