跳转到系统相机拍照

2020-04-24  本文已影响0人  爱我O就直说

2020-04-24

//首先,别忘记 存储权限 的处理 android.permission.WRITE_SETTINGS
checkPermission()


    String imgPath = "";

    //    跳转到相机
    public void toCamera(String fileName, String sdFolder) {
        
        if (!checkPermission()) return;
                
        imgPath = SDCardUtils.getSDCardPathByEnvironment() + File.separator + sdFolder;
        File file = new File(imgPath);
        if (!file.exists()) file.mkdirs();
        imgPath = imgPath + File.separator + fileName;

        //传uri(图片保存地址),返回时data里没数据
        Uri outUri = UriUtils.file2Uri(new File(imgPath));
        startActivityForResult(IntentUtils.getCaptureIntent(outUri), 1);
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        Log.i(TAG, "onActivityResult: " + imgPath);
        File file = new File(imgPath);
        Log.i(TAG, "onActivityResult: " + file.exists());

        if (resultCode == RESULT_OK) {
            switch (requestCode) {
                //拍照功能
                case 1:
                    // TODO: 做拍照后的处理

                    Bitmap bitmap = BitmapFactory.decodeFile(imgPath);
//                    Bitmap bitmap = ImageUtils.getBitmap(imgPath,target);
                    Log.i(TAG, "onActivityResult: " + bitmap.getWidth() + "~~" + bitmap.getHeight());

                    //质量压缩
                    byte[] bitmapByte = ImageUtils.compressByQuality(bitmap, 90);
                    Log.i(TAG, "onActivityResult: " + bitmapByte.length);

                    //宽高缩放压缩
                    bitmap = ImageUtils.compressByScale(bitmap, 600, 800);
                    byte[] bitmapByte2 = ImageUtils.compressByQuality(bitmap, 90); //再质量压缩
                    Log.i(TAG, "onActivityResult: " + bitmapByte2.length);

                    //写到文件
                    FileIOUtils.writeFileFromBytesByStream(file, bitmapByte2);
                    Log.i(TAG, "onActivityResult: " + file.length());

                    Glide.with(this).load(bitmapByte2).into(target);

                    break;
            }
        }

    }

    public static String getSDCardPathByEnvironment() {
        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
            return Environment.getExternalStorageDirectory().getAbsolutePath();
        }
        return "";
    }

    public static Intent getCaptureIntent(final Uri outUri) {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, outUri);
        intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        return intent;
    }

}

上一篇下一篇

猜你喜欢

热点阅读