文章参考
拍照 - CameraActivity
public class CameraActivity extends BaseAbstractActivity {
public static final String TAG = "CameraActivity";
public static final int ACTIVITY_REQUEST_CODE_CAMERA = 11;
private Context mContext;
@BindView(R.id.id_btn_camera)
TextView btnCamera;
@BindView(R.id.id_btn_delete_photo)
TextView btnDelete;
private Uri cameraPhotoUri = null;
private String cameraPhotoPath = null;
@Override
protected int getLayoutId() {
return R.layout.act_camera;
}
private Uri createImageUriAndroidQAndHigher() {
String status = Environment.getExternalStorageState();
if (status.equals(Environment.MEDIA_MOUNTED)) {
return getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues());
} else {
return getContentResolver().insert(MediaStore.Images.Media.INTERNAL_CONTENT_URI, new ContentValues());
}
}
private Uri createImageUriAndroidPieAndLower() {
File photoFile = new File(getExternalCacheDir(), "output_image.png");
try {
photoFile.createNewFile();
} catch (IOException e) {
e.printStackTrace();
}
if (photoFile != null) {
cameraPhotoPath = photoFile.getAbsolutePath();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
return FileProvider.getUriForFile(getActivity(), BuildConfig.APPLICATION_ID + ".provider", photoFile);
} else {
return Uri.fromFile(photoFile);
}
}
return null;
}
@Override
protected void init() {
mContext = this;
btnCamera.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PermissionInstance.getInstance().requestPermissions(getActivity(), new String[]{Manifest.permission.CAMERA}, new PermissionCallback() {
@Override
public void acceptPermission(String permission) {
PermissionInstance.getInstance().requestPermissions(getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, new PermissionCallback() {
@Override
public void acceptPermission(String permission) {
takePhoto();
}
@Override
public void rejectPermissionWithAskAgain(String permission) {
showToast("拒绝 - 存储权限");
}
@Override
public void rejectPermissionWithoutAskAgain(String permission) {
showToast("不在询问 - 存储权限");
}
});
}
@Override
public void rejectPermissionWithAskAgain(String permission) {
showToast("拒绝 - 拍照权限");
}
@Override
public void rejectPermissionWithoutAskAgain(String permission) {
showToast("不在询问 - 拍照权限");
}
});
}
});
btnDelete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
deletePhoto();
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == ACTIVITY_REQUEST_CODE_CAMERA) {
Log.i(TAG, "------ 拍照成功");
}
}
private void takePhoto() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
cameraPhotoUri = createImageUriAndroidQAndHigher();
} else {
cameraPhotoUri = createImageUriAndroidPieAndLower();
}
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
intent.putExtra(MediaStore.EXTRA_OUTPUT, cameraPhotoUri);
startActivityForResult(intent, ACTIVITY_REQUEST_CODE_CAMERA);
}
protected void deletePhoto() {
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.Q) {
if (cameraPhotoUri != null) {
mContext.getContentResolver().delete(cameraPhotoUri, null);
cameraPhotoUri = null;
Log.i(TAG, "------ android 10 以上照片删除成功");
}
} else if (Build.VERSION.SDK_INT == Build.VERSION_CODES.Q) {
if (cameraPhotoUri != null) {
mContext.getContentResolver().delete(cameraPhotoUri, null, null);
cameraPhotoUri = null;
Log.i(TAG, "------ android 10 照片删除成功");
}
} else {
if (TextUtils.isEmpty(cameraPhotoPath)) {
File file = new File(cameraPhotoPath);
if (file.exists()) {
file.delete();
}
Log.i(TAG, "------ android 10 以下照片删除成功");
}
}
}
@Override
protected BaseAbstractActivity getActivity() {
return this;
}
}
相册 - AlbumActivity
public class AlbumActivity extends BaseAbstractActivity {
public static final String TAG = "AlbumActivity";
public static final int ACTIVITY_REQUEST_CODE_ALBUM = 12;
@BindView(R.id.id_btn_album)
TextView btnAlbum;
@BindView(R.id.id_btn_show_path)
TextView btnShowPicturePath;
private Uri albumUri = null;
private Context mContext;
@Override
protected int getLayoutId() {
return R.layout.act_album;
}
@Override
protected void init() {
mContext = this;
btnAlbum.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
PermissionInstance.getInstance().requestPermissions(getActivity(), new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, new PermissionCallback() {
@Override
public void acceptPermission(String permission) {
choosePicture();
}
@Override
public void rejectPermissionWithAskAgain(String permission) {
showToast("拒绝 - 存储权限");
}
@Override
public void rejectPermissionWithoutAskAgain(String permission) {
showToast("不在询问 - 存储权限");
}
});
}
});
btnShowPicturePath.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
showToast(UriUtils.getFileAbsolutePath(mContext, albumUri));
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK && requestCode == ACTIVITY_REQUEST_CODE_ALBUM) {
albumUri = data == null ? null : data.getData();
Log.i(TAG, "------ 照片选择成功");
}
}
private void choosePicture() {
Intent innerIntent = new Intent();
innerIntent.setAction(Intent.ACTION_GET_CONTENT);
innerIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
innerIntent.setType("image/*");
Intent wrapperIntent = Intent.createChooser(innerIntent, "");
startActivityForResult(wrapperIntent, ACTIVITY_REQUEST_CODE_ALBUM);
}
@Override
protected BaseAbstractActivity getActivity() {
return this;
}
}