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"?>                                                    

 

更多相关文章

  1. android通过Intent调用手机图片,音频,视频录音拍照等代码
  2. Android 获取屏幕截图 和保存到本地的sd卡路径下
  3. Windows下,Android Studio项目路径中包含中文字符无法编译的问题
  4. android--------根据文件路径加载指定文件
  5. 视频源
  6. 尚硅谷《全套Java、Android、HTML5前端视频》
  7. Android 使用意图录制视频
  8. android播放本地工程里的音乐和视频的方法
  9. 短视频带货源码,解决Dialog 不铺满屏幕问题

随机推荐

  1. android中的Handler(2)
  2. Android(安卓)音频管理器AudioManager类
  3. Android如何保存和读取设置
  4. Android(安卓)增量更新实例(Smart App Upd
  5. Android(安卓)ContentProvider实现应用间
  6. android的文件系统结构及其引导过程的初
  7. Android中使用Streams的两种方法
  8. Android(安卓)Java执行Shell命令
  9. 安装、验证、优化APK
  10. android ksoap调用天气预报