@SuppressLint("CheckResult")
private void openPictuer(Context context) {
RxPermissions rxPermissions = new RxPermissions(this);
String[] permissions = {Manifest.permission.CAMERA,
Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE};
rxPermissions.requestEach(permissions)
.subscribe(new Consumer<Permission>() {
@Override
public void accept(Permission permission) throws Exception {
if (permission.granted) {
isGetPermissions = true;
} else if (permission.shouldShowRequestPermissionRationale) {
isGetPermissions = false;
ToastUtils.showToast("请开启权限!");
} else {
ToastUtils.showToast("请开启权限!");
isGetPermissions = false;
finish();
}
}
});
if (isGetPermissions) {
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setTitle("请选择");
builder.setItems(new String[]{"相机", "相册"}, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case 0://相机
dialog.dismiss();
Intent intent_camera = new Intent("android.media.action.IMAGE_CAPTURE");
startActivityForResult(intent_camera, 1);
break;
case 1://相册
dialog.dismiss();
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) {
super.onActivityResult(requestCode, resultCode, data);
if (data != null) {
switch (requestCode) {
case 1:
// 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");
bitmaps.add(0, bitmap);
break;
case 2:
if (resultCode == RESULT_OK) { // 判断手机系统版本号
if (Build.VERSION.SDK_INT >= 19) {
// 4.4及以上系统使用这个方法处理图片
handleImageOnKitKat(data);
} else {
// 4.4以下系统使用这个方法处理图片
handleImageBeforeKitKat(data);
}
}
break;
}
msgImageAdapter.setNewData(bitmaps);
} else {
ToastUtils.showToast("未选择图片!");
}
}
private void handleImageOnKitKat(Intent data) {
String imagePath = null;
Uri uri = data.getData();
if (DocumentsContract.isDocumentUri(this, uri)) {
// 如果是document类型的Uri,则通过document id处理
String docId = DocumentsContract.getDocumentId(uri);
if ("com.android.providers.media.documents".equals(uri.getAuthority())) {
String id = docId.split(":")[1];
// 解析出数字格式的id
String selection = MediaStore.Images.Media._ID + "=" + id;
imagePath = getImagePath(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, selection);
} else if ("com.android.providers.downloads.documents".equals(uri.getAuthority())) {
Uri contentUri = ContentUris.withAppendedId(Uri.parse("content: //downloads/public_downloads"), Long.valueOf(docId));
imagePath = getImagePath(contentUri, null);
}
} else if ("content".equalsIgnoreCase(uri.getScheme())) {
// 如果是content类型的Uri,则使用普通方式处理
imagePath = getImagePath(uri, null);
} else if ("file".equalsIgnoreCase(uri.getScheme())) {
// 如果是file类型的Uri,直接获取图片路径即可
imagePath = uri.getPath();
}
// 根据图片路径显示图片
displayImage(imagePath);
}
/**
* android 4.4以前的处理方式
*
* @param data
*/
private void handleImageBeforeKitKat(Intent data) {
Uri uri = data.getData();
String imagePath = getImagePath(uri, null);
displayImage(imagePath);
}
@SuppressLint("Range")
private String getImagePath(Uri uri, String selection) {
String path = null;
// 通过Uri和selection来获取真实的图片路径
Cursor cursor = getContentResolver().query(uri, null, selection, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
path = cursor.getString(cursor.getColumnIndex(MediaStore.Images.Media.DATA));
}
cursor.close();
}
return path;
}
private void displayImage(String imagePath) {
Bitmap bitmap = BitmapFactory.decodeFile(imagePath);
bitmaps.add(0, bitmap);
}
08-04
7376
05-25
1927