做了一个拍照及从相册调用图片作为头像的功能:
一开始代码写好在Android6.0系统上正常运行,换了Android8.0 9.0就闪退了,那问题就是版本不兼容问题了,
一、首先在onCreate方法中加入了以下代码,判断系统大于6.0
//android 7.0系统以上解决拍照的问题
StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
StrictMode.setVmPolicy(builder.build());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
builder.detectFileUriExposure();
}
}
二、解决了这个之后,能打开相机了,但是,,,拍照完毕后以及从相册选取完照片后,不能调取剪裁,于是在onActivityResult回调方法中及剪裁方法cropPhoto中 又加了几行代码
//处理手机不兼容问题
try {
head = BitmapFactory.decodeStream(getContentResolver().openInputStream(uritempFile));
verifyStoragePermissions(this);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
uritempFile=uri;
并且千万千万要注释掉这下面两条代码:
// head = extras.getParcelable("data");
//intent.putExtra("return-data", true);
下面是比较完整的代码:
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case CROP_PHOTO1:
if (resultCode == RESULT_OK) {
cropPhoto(data.getData()); //裁剪图片
}
break;
case CROP_PHOTO2:
if (resultCode == RESULT_OK) {
File temp = new File(Environment.getExternalStorageDirectory() +"/"+
spUserName+"_head.jpg");
cropPhoto(Uri.fromFile(temp)); //裁剪图片
}
break;
case SAVE_PHOTO:
if (data != null) {
Bundle extras = data.getExtras();
// head = extras.getParcelable("data");
//处理手机不兼容问题
try {
head = BitmapFactory.decodeStream(getContentResolver().openInputStream(uritempFile));
verifyStoragePermissions(this);
} catch (FileNotFoundException e) {