1. 添加权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MANAGE_EXTERNAL_STORAGE" />
2. CameraActivity
package com.wang;
import android.Manifest;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.widget.Button;
import android.widget.ImageView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
public class camera extends AppCompatActivity {
private static final int CAMERA_CODE = 20;
private static final int CROP_CODE = 19;
private static final int RESULT_OK = -1;
private String path;
private Uri uri;
private ImageView picture;
private Button picker;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_camer);
permission();
init();
}
private void init() {
picture = findViewById(R.id.image_view);
picker = findViewById(R.id.pick);
File uriFile = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
uri = getUriForFile(this, uriFile);
picker.setOnClickListener(v -> {
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, CAMERA_CODE);
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == CAMERA_CODE) {
Bitmap bitmap = decodeUriAsBitmap(uri);
picture.setImageBitmap(bitmap);
}
}
private void permission() {
int REQUEST_CODE_CONTACT = 101;
String[] strPermissions = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA};
for (String strPermission : strPermissions) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (checkSelfPermission(strPermission) != PackageManager.PERMISSION_GRANTED) {
requestPermissions(strPermissions, REQUEST_CODE_CONTACT);
}
}
}
}
private Bitmap decodeUriAsBitmap(Uri uri) {
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
return bitmap;
}
public boolean save(Bitmap src, Bitmap.CompressFormat format, boolean recycle) {
Date date = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
String pictureName = simpleDateFormat.format(date);
path = getFilesDir().getPath() + "/" + pictureName+".jpeg";
File file = new File(path);
if (src == null)
return false;
OutputStream os;
boolean ret = false;
try {
os = new BufferedOutputStream(new FileOutputStream(file));
ret = src.compress(format, 100, os);
if (recycle && !src.isRecycled())
src.recycle();
} catch (IOException e) {
e.printStackTrace();
}
return ret;
}
public static Uri getUriForFile(Context context, File file) {
Uri fileUri = null;
String filePath = file.getAbsolutePath();
Cursor cursor = context.getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
new String[]{"_id"}, "_data=? ", new String[]{filePath}, null);
if (cursor != null && cursor.moveToFirst()) {
int id = cursor.getInt(cursor.getColumnIndexOrThrow("_id"));
Uri baseUri = Uri.parse("content://media/external/images/media");
fileUri = Uri.withAppendedPath(baseUri, "" + id);
} else if (file.exists()) {
ContentValues values = new ContentValues();
values.put("_data", filePath);
fileUri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
} else {
fileUri = null;
}
return fileUri;
}
}
3. 布局文件
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="60dp"
android:orientation="vertical">
<Button
android:id="@+id/pick"
android:layout_width="160dp"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:text="选择图片"
android:textSize="20sp" />
<ImageView
android:id="@+id/image_view"
android:layout_width="400dp"
android:layout_height="400dp"
android:layout_gravity="center" />
</LinearLayout>