在我的应用程序中,我让用户选择一个图像并随后对其进行裁剪。在此之后,图像被设置为 imageView。
我的解决方案没有任何问题,直到昨天我收到两个人的消息,他们的华为智能手机有同样的问题。他们总是收到一条消息“无法加载图像...”并且没有图像设置到 imageView。
在调试时,我发现 data.getData() 在 onActivityResult 中为空,用于裁剪意图。
我尝试了很多不同的方法来挑选和裁剪图像,所有这些方法都对我有用,但对华为智能手机却没有。我没有想法,可能需要一些帮助。
这是代码:
public void onClick(View v){
Permissions.verifyStoragePermissions(this);
Intent galleryIntent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent, RESULT_LOAD_IMG);
}
@Override
protected void onActivityResult(int requestCode, int resultCode,
Intent data) {
super.onActivityResult(requestCode, resultCode, data);
try {
if (requestCode == RESULT_LOAD_IMG && resultCode == RESULT_OK
&& null != data) {
Uri uri = data.getData();
this.performCrop(uri);
} else if (requestCode == RESULT_CROP_IMG) {
if (data != null) {
ImageView imgView =
(ImageView) findViewById(R.id.imageView_my_profile);
imgView.setImageURI(data.getData());
}
}
} catch (Exception e) {
Toast.makeText(this, getString(R.string.global_default_error), Toast.LENGTH_LONG)
.show();
}
}
private void performCrop(Uri picUri) {
try {
ImageView imgView = (ImageView) findViewById(R.id.imageView_my_profile);
Intent cropIntent = new Intent("com.android.camera.action.CROP");
cropIntent.setDataAndType(picUri, "image/*");
cropIntent.putExtra("crop", "true");
cropIntent.putExtra("aspectX", imgView.getWidth());
cropIntent.putExtra("aspectY", imgView.getHeight());
cropIntent.putExtra("outputX", imgView.getWidth());
cropIntent.putExtra("outputY", imgView.getHeight());
String folder_main = "Test";
File f = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES), folder_main);
f.mkdirs();
f = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).toString()+"/Test/profilepic" + System.currentTimeMillis() +".jpg");
Uri newUri = Uri.fromFile(f);
cropIntent.putExtra(MediaStore.EXTRA_OUTPUT, newUri);
startActivityForResult(cropIntent, RESULT_CROP_IMG);
}
catch (ActivityNotFoundException anfe) {
ImageView imgView = (ImageView) findViewById(R.id.imageView_my_profile);
imgView.setImageURI(picUri);
}
}