0

在我的应用程序中,我让用户选择一个图像并随后对其进行裁剪。在此之后,图像被设置为 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);
    }
}
4

0 回答 0