所需权限
<uses-permission android:name="android.permission.CAMERA" />
<!--写入SD卡的权限:如果你希望保存相机拍照后的照片-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--读取SD卡的权限:打开相册选取图片所必须的权限-->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
权限检查:
@RequiresApi(api = Build.VERSION_CODES.M)
void Request() {
//获取相机拍摄读写权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//版本判断
if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA}, 1);
}
}
}
调用弹出框:
private void openPictuer() {
AlertDialog.Builder builder = new AlertDialog.Builder(MyInformation.this);
builder.setTitle("请选择");
builder.setItems(new String[]{"相机", "相册"}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0:
//相机
Intent intent_camera = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent_camera, 1);
break;
case 1:
//相册
Intent intent = new Intent(Intent.ACTION_PICK);
intent.setDataAndType(MediaStore.Images.Media.INTERNAL_CONTENT_URI, "image/*");//相片类型
startActivityForResult(intent, 2);
break;
}
}
});
builder.create().show();
}
两种方式回调
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode==1&&resultCode==RESULT_OK){
Toast.makeText(MyInformation.this,"相机回调:true",Toast.LENGTH_SHORT).show();
/*缩略图信息是储存在返回的intent中的Bundle中的,
* 对应Bundle中的键为data,因此从Intent中取出
* Bundle再根据data取出来Bitmap即可*/
Bundle extras = data.getExtras();
Bitmap bitmap = (Bitmap) extras.get("data");
imageView.setImageBitmap(bitmap);
}
if(requestCode==2&&resultCode == RESULT_OK){
Toast.makeText(MyInformation.this,"相册回调:true",Toast.LENGTH_SHORT).show();
// 第一种方法:
Uri selectedImage = data.getData();
imageView.setImageURI(selectedImage);
//第二中方法:
// Uri selectedImage = data.getData();
// String[] filePathColumn = { MediaStore.Images.Media.DATA };
// Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null);
// cursor.moveToFirst();
// int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
// String picturePath = cursor.getString(columnIndex);
// cursor.close();
// Bitmap bm = BitmapFactory.decodeFile(picturePath);
// imageView.setImageBitmap(bm);
}
}