优秀的编程知识分享平台

网站首页 > 技术文章 正文

Android调用系统的手机拍照,打开相册功能并返回bitmap步骤

nanyue 2024-08-22 17:34:00 技术文章 5 ℃

1. 添加权限写入和相机:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<uses-permission android:name="android.permission.CAMERA" />

2. 设置常量区分相册和相机

public final static int CAMERA_REQUEST_CODE = 0;

public final static int GALLERY_REQUEST_CODE = 1;

3. 相机拍照需要申请的权限

if (ContextCompat.checkSelfPermission(MainActivity.this,

Manifest.permission.WRITE_EXTERNAL_STORAGE)

!= PackageManager.PERMISSION_GRANTED) {

ActivityCompat.requestPermissions(MainActivity.this,

new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},

CAMERA_REQUEST_CODE);

}else { //权限被授予

takePhoto();

4.拍照方法的实现

private void takePhoto(){

Intent intent1 = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

PhotoPath = Environment.getExternalStorageDirectory() + File.separator + "photo.jpeg";

imageUri = FileProvider.getUriForFile(MainActivity.this,

MainActivity.this.getApplicationContext().getPackageName() +".my.provider",

new File(PhotoPath));

intent1.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);

startActivityForResult(intent1, CAMERA_REQUEST_CODE);

}

5.打开相册方法的实现:

private void choosePhoto(){

Intent intent2 = new Intent(Intent.ACTION_PICK, null);

intentToPickPic.setDataAndType(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, "image/jpeg");

startActivityForResult(intent2, GALLERY_REQUEST_CODE);

}

6.通过回调方法处理相册和拍照得到的图片:

@Override

public void onActivityResult(int requestCode, int resultCode, Intent data) {

if (resultCode == MainActivity.RESULT_OK) {

switch (requestCode) {

case CAMERA_REQUEST_CODE: {

try {

Bitmap bit = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));

} catch (Exception e) {

e.printStackTrace();

}

break;

}

case GALLERY_REQUEST_CODE: {

try {

imageUri = data.getData();

if(imageUri!=null) {

Bitmap bit = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri));

}

} catch (Exception e) {

e.printStackTrace();

}

break;

}

}

}

super.onActivityResult(requestCode, resultCode, data);

}

Tags:

最近发表
标签列表