android 相机拍照

package com.example.take_photo;

import android.Manifest;
import android.app.Activity;
import android.content.ContentValues;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.StrictMode;
import android.provider.MediaStore;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import com.bumptech.glide.Glide;

import java.io.File;
import java.io.FileOutputStream;

public class MainActivity extends Activity implements View.OnClickListener {
    private ImageView left;
    private ImageView right;
    private ImageView mImageView;
    private String mImagePath;
    private String mImageName;
    private Button upload;
    private static final int REQUEST_TAKEPHOTO_CODE2 = 1002;
    private String filePath;
    private String StringpicPath;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initPhotoError();
        left = findViewById(R.id.ig_left);
        right = findViewById(R.id.ig_right);
        upload = findViewById(R.id.upload);
        upload.setOnClickListener(this);
        left.setOnClickListener(this);
        right.setOnClickListener(this);
    }

    private void initPhotoError() {
        // android 7.0系统解决拍照的问题
        StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
        StrictMode.setVmPolicy(builder.build());
        builder.detectFileUriExposure();
    }

    @Override
    public void onClick(View v) {
        int id = v.getId();
        if (id == left.getId()) {
            mImageView = (ImageView) v;
            open_camra();
        } else if (id == right.getId()) {
            mImageView = (ImageView) v;
            open_camra();
        } else if (id == upload.getId()) {
//            File file = new File(StringpicPath);
//            System.out.println("----> filename "+StringpicPath+" "+file.exists());
//            Glide.with(this).load(file).centerCrop().thumbnail(0.1f).error(R.drawable.ic_launcher_foreground).into(mImageView);
        }
    }


    private void getPermission() {
        PackageManager pm = getPackageManager();
        boolean permission = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.CAMERA", "com.example.take_photo"));
        if (!permission) {
            //没有权限
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{Manifest.permission.CAMERA}, 15);
            }
        }
        permission = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.READ_EXTERNAL_STORAGE", "com.example.take_photo"));
        if (!permission) {
            //没有权限
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 15);
            }
        }
        permission = (PackageManager.PERMISSION_GRANTED == pm.checkPermission("android.permission.WRITE_EXTERNAL_STORAGE", "com.example.take_photo"));
        if (!permission) {
            //没有权限
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                requestPermissions(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 15);
            }
        }
    }

    protected void open_camra() {
        getPermission();
        Intent takeIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

        String imageFileName = System.currentTimeMillis() + ".png";

        String path = Environment.getExternalStorageDirectory().getAbsolutePath();

        // 定义生成图片的路径(全局)
        StringpicPath = path + "/" + imageFileName;

        Uri mImageCaptureUri;


        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { //android7.0以上
            ContentValues contentValues = new ContentValues(1);
            contentValues.put(MediaStore.Images.Media.DATA, new File(path, imageFileName).getAbsolutePath());
            mImageCaptureUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
        } else {
            mImageCaptureUri = Uri.fromFile(new File(path, imageFileName));
        }
        takeIntent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
        System.out.println("startActivityForResult path-->" + StringpicPath);
        startActivityForResult(takeIntent, 456);
    }


    private void takePhoto() {
        //获取权限
        getPermission();
        //获取保存位置
        createFile();
        mImageName = "" + System.currentTimeMillis() + ".jpg";
        Intent it = new Intent("android.media.action.IMAGE_CAPTURE");
//        it.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(mImagePath + mImageName)));
        filePath = Environment.getExternalStorageDirectory().getPath();//获取SD卡路径
        filePath = filePath + "/" + "temp.png";
        startActivityForResult(it, REQUEST_TAKEPHOTO_CODE2);
    }

    public void createFile() {
        mImagePath = Environment.getExternalStorageDirectory() + "/mypp/";//指定保存路径
        File f = new File(mImagePath);
        if (!f.exists()) {
            f.mkdir();
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 456 && resultCode == Activity.RESULT_OK) {
            System.out.println("------------>");
            System.out.println("onActivityResult path-->" + StringpicPath);
            File file = new File(StringpicPath);
            System.out.println("file exits-->" + file.exists());
//        if (requestCode == REQUEST_TAKEPHOTO_CODE2 && resultCode == Activity.RESULT_OK && data != null) {
            Glide.with(this).load(file).thumbnail(0.1f).into(mImageView);
            try {
//                Bitmap bitmap = Glide.with(this).asBitmap().load(file).submit(1000, 1000).get();
                Bitmap bitmap = BitmapFactory.decodeFile(StringpicPath);
                System.out.println("bitmap-->"+bitmap);
                FileOutputStream fos = new FileOutputStream(new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/bak.png"));
                bitmap.compress(Bitmap.CompressFormat.PNG, 50, fos);
                fos.flush();
                fos.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }

    public static Bitmap ResizeBitmap(Bitmap bitmap, int newWidth) {//拍照的图片太大,设置格式大小
        int width = bitmap.getWidth();
        int height = bitmap.getHeight();
        float temp = ((float) height) / ((float) width);
        int newHeight = (int) ((newWidth) * temp);
        float scaleWidth = ((float) newWidth) / width;
        float scaleHeight = ((float) newHeight) / height;
        Matrix matrix = new Matrix();
        // resize the bit map
        matrix.postScale(scaleWidth, scaleHeight);
        // matrix.postRotate(45);
        Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0, width, height, matrix, true);
        bitmap.recycle();
        return resizedBitmap;
    }
}

 

posted @ 2020-06-19 01:02  ForMeDream  阅读(159)  评论(0)    收藏  举报