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;
}
}