私のアプリでは、ユーザーが画像を選択し、後でトリミングできるようにしています。この後、画像はimageViewに設定されます。
昨日、同じ問題を抱えたHuaweiスマートフォンを使用している2人からメッセージを受け取るまで、私のソリューションに問題はありませんでした。「イメージの読み込みに失敗しました...」というメッセージが常に表示され、imageView にイメージが設定されていません。
デバッグ中に、data.getData() がクロップ インテントの onActivityResult で null であることを認識しました。
画像を選択してトリミングするためにさまざまな可能性を試しましたが、それらはすべてうまくいきましたが、Huaweiスマートフォンではうまくいきませんでした. 私はアイデアがなく、助けが必要かもしれません。
コードは次のとおりです。
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);
}
}