MultiMediaUtil.java 8.7 KB
Newer Older
门心叼龙's avatar
门心叼龙 已提交
1
package com.zjx.vcars.common.util;
门心叼龙's avatar
门心叼龙 已提交
2 3 4 5 6 7 8 9 10

import android.Manifest;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
门心叼龙's avatar
门心叼龙 已提交
11
import android.support.v4.content.FileProvider;
门心叼龙's avatar
门心叼龙 已提交
12 13

import com.tbruyelle.rxpermissions2.RxPermissions;
门心叼龙's avatar
门心叼龙 已提交
14
import com.zjx.vcars.common.util.ToastUtil;
门心叼龙's avatar
门心叼龙 已提交
15 16 17 18 19 20 21 22 23 24

import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

import io.reactivex.functions.Consumer;
import me.nereo.multi_image_selector.MultiImageSelector;

/**
 * Description: <h3>多媒体工具类</h3>
门心叼龙's avatar
门心叼龙 已提交
25 26 27 28 29 30 31 32 33 34 35
 * <ul>
 * <li>1.图片选择器,可算多张图片</li>
 * <li>2.拍照</li>
 * <li>3.拍视频</li>
 * <li>4.创建一个图片路径</li>
 * <li>5.创建一个视频路径</li>
 * </ul>
 * <h3>注意事项:</h3>
 * <ul><li>1. 拍照、拍视频、选择图片完成的回调都在onActivityResult中回调的</l1>
 * <li>2.选择图片获取:List<String> path = data.getStringArrayListExtra(MultiImageSelectorActivity.EXTRA_RESULT)</li>
 * </ul>
门心叼龙's avatar
门心叼龙 已提交
36 37 38 39 40 41 42 43 44 45 46 47 48
 * Author:      gxl<br>
 * Date:        2018/12/25<br>
 * Version:     V1.0.0<br>
 * Update:     <br>
 */
public class MultiMediaUtil {
    public static final int SELECT_IMAGE = 1001;
    public static final int TAKE_PHONE = 1002;
    public static final int TAKE_VIDEO = 1003;

    /**
     * 打开图片选择器,选择图片<br>
     * 来获取图片
门心叼龙's avatar
门心叼龙 已提交
49
     *
门心叼龙's avatar
门心叼龙 已提交
50 51 52 53
     * @param activity
     * @param count:选择图片个数
     * @param requestcode
     */
门心叼龙's avatar
门心叼龙 已提交
54
    public static void pohotoSelect(FragmentActivity activity, int count, int requestcode) {
门心叼龙's avatar
门心叼龙 已提交
55 56 57 58 59 60 61
        pohotoSelect(activity, null, count, requestcode);
    }

    public static void pohotoSelect(Fragment fragment, int count, int requestcode) {
        pohotoSelect(null, fragment, count, requestcode);
    }

门心叼龙's avatar
门心叼龙 已提交
62 63
    private static void pohotoSelect(final FragmentActivity activity, final Fragment fragment, final int count, final int requestcode) {
        RxPermissions rxPermissions = null;
门心叼龙's avatar
门心叼龙 已提交
64
        if (activity != null) {
门心叼龙's avatar
门心叼龙 已提交
65
            rxPermissions = new RxPermissions(activity);
门心叼龙's avatar
门心叼龙 已提交
66
        } else if (fragment != null) {
门心叼龙's avatar
门心叼龙 已提交
67
            rxPermissions = new RxPermissions(fragment);
门心叼龙's avatar
门心叼龙 已提交
68
        }
门心叼龙's avatar
门心叼龙 已提交
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
        rxPermissions.request(Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE).subscribe(new Consumer<Boolean>() {
            @Override
            public void accept(Boolean aBoolean) throws Exception {
                if (aBoolean) {
                    if (activity != null) {
                        MultiImageSelector.create().showCamera(false).count(count).single().multi()
                                //.origin(ArrayList<String>)
                                .start(activity, requestcode);
                    } else if (fragment != null) {
                        MultiImageSelector.create().showCamera(false).count(count).single().multi()
                                //.origin(ArrayList<String>)
                                .start(fragment, requestcode);
                    }
                } else {
                    ToastUtil.showToast("无读写外部存储设备权限");
                }
            }
        });

门心叼龙's avatar
门心叼龙 已提交
88 89 90 91 92

    }

    /**
     * 拍照
门心叼龙's avatar
门心叼龙 已提交
93
     *
门心叼龙's avatar
门心叼龙 已提交
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
     * @param activity
     * @param path:照片存放的路径
     * @param requestcode
     */
    public static void takePhoto(FragmentActivity activity, String path, int requestcode) {
        takePhoto(activity, null, path, requestcode);
    }

    public static void takePhoto(Fragment fragment, String path, int requestcode) {
        takePhoto(null, fragment, path, requestcode);
    }

    private static void takePhoto(final FragmentActivity activity, final Fragment fragment, final String path, final int requestcode) {
        if (activity == null && fragment == null) {
            return;
        }
        RxPermissions rxPermissions = null;
        if (activity != null) {
            rxPermissions = new RxPermissions(activity);
        } else if (fragment != null) {
            rxPermissions = new RxPermissions(fragment);
        }

        rxPermissions.request(Manifest.permission.CAMERA).subscribe(new Consumer<Boolean>() {
            @Override
            public void accept(Boolean aBoolean) throws Exception {
                if (aBoolean) {
                    File file = new File(path);
                    try {
                        if (file.createNewFile()) {
                            Intent intent = new Intent();
                            intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
                            intent.addCategory(Intent.CATEGORY_DEFAULT);
                            if (activity != null) {
门心叼龙's avatar
门心叼龙 已提交
128
                                intent.putExtra(MediaStore.EXTRA_OUTPUT, FileProvider.getUriForFile(activity, "com.zjx.vcars.fileprovider", file));
门心叼龙's avatar
门心叼龙 已提交
129 130
                                activity.startActivityForResult(intent, requestcode);
                            } else if (fragment != null) {
门心叼龙's avatar
门心叼龙 已提交
131
                                intent.putExtra(MediaStore.EXTRA_OUTPUT, FileProvider.getUriForFile(fragment.getContext(), "com.zjx.vcars.fileprovider", file));
门心叼龙's avatar
门心叼龙 已提交
132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148
                                fragment.startActivityForResult(intent, requestcode);
                            }
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        ToastUtil.showToast("无法启动拍照程序");
                    }
                } else {
                    ToastUtil.showToast("无摄像头权限,无法进行拍照!");
                }
            }
        });
    }


    /**
     * 拍视频
门心叼龙's avatar
门心叼龙 已提交
149
     *
门心叼龙's avatar
门心叼龙 已提交
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181
     * @param activity
     * @param path:视频存放的路径
     * @param requestcode
     */
    public static void takeVideo(final FragmentActivity activity, final String path, final int requestcode) {
        takeVideo(activity, null, path, requestcode);
    }

    public static void takeVideo(final Fragment fragment, final String path, final int requestcode) {
        takeVideo(null, fragment, path, requestcode);
    }

    private static void takeVideo(final FragmentActivity activity, final Fragment fragment, final String path, final int requestcode) {
        if (activity == null && fragment == null) {
            return;
        }
        RxPermissions rxPermissions = null;
        if (activity != null) {
            rxPermissions = new RxPermissions(activity);
        } else if (fragment != null) {
            rxPermissions = new RxPermissions(fragment);
        }
        rxPermissions.request(Manifest.permission.CAMERA).subscribe(new Consumer<Boolean>() {
            @Override
            public void accept(Boolean aBoolean) throws Exception {
                if (aBoolean) {
                    File file = new File(path);
                    try {
                        if (file.createNewFile()) {
                            Intent intent = new Intent();
                            intent.setAction(MediaStore.ACTION_VIDEO_CAPTURE);
                            intent.addCategory(Intent.CATEGORY_DEFAULT);
门心叼龙's avatar
门心叼龙 已提交
182
                            //intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
门心叼龙's avatar
门心叼龙 已提交
183
                            if (activity != null) {
门心叼龙's avatar
门心叼龙 已提交
184
                                intent.putExtra(MediaStore.EXTRA_OUTPUT, FileProvider.getUriForFile(activity, "com.zjx.vcars.fileprovider", file));
门心叼龙's avatar
门心叼龙 已提交
185 186
                                activity.startActivityForResult(intent, requestcode);
                            } else if (fragment != null) {
门心叼龙's avatar
门心叼龙 已提交
187
                                intent.putExtra(MediaStore.EXTRA_OUTPUT, FileProvider.getUriForFile(fragment.getContext(), "com.zjx.vcars.fileprovider", file));
门心叼龙's avatar
门心叼龙 已提交
188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216
                                fragment.startActivityForResult(intent, requestcode);
                            }

                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                        ToastUtil.showToast("无法启动拍视频程序");
                    }
                } else {
                    ToastUtil.showToast("无摄像头权限,无法进行拍视频!");
                }
            }
        });
    }

    //获取图片路径
    public static String getPhotoPath(Activity activity) {
        String filename = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()) + ".jpg";
        String filepath = activity.getExternalFilesDir(Environment.DIRECTORY_PICTURES).getAbsolutePath() + File.separator + filename;
        return filepath;
    }

    //获取视频的路径
    public static String getVideoPath(Activity activity) {
        String filename = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()) + ".3gp";
        String filepath = activity.getExternalFilesDir(Environment.DIRECTORY_MOVIES).getAbsolutePath() + File.separator + filename;
        return filepath;
    }
}