首页 > 解决方案 > Android从图库中选择图像不起作用

问题描述

我正在尝试从设备的图库中选择图像,对其进行裁剪,然后将其显示在 imageView 中。单击图像选择器中的图像后,应用程序退出并显示 logcat 消息显示 V/FA:不活动,与服务断开连接。我正在后台运行一项服务以从 Firestore 获取数据。

我也尝试过使用像https://github.com/ArthurHub/Android-Image-Cropper这样的裁剪库,但行为是一样的。

我还尝试了以下方法。

    FABfile.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        Intent intent  = new Intent();
        intent.setType("image/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(intent, PICK_IMAGE_REQUEST);
    }
});

protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null){
        mImageUri = data.getData();
        imageView.setImageURI(result.getUri());
    }
}

请帮助解决此问题。

标签: androidbackground-servicestartactivityforresult

解决方案


使用这些方法从图库中选择图像:

 public void showGallery() {
    if (hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
        loadGallery();
    } else {
        requestPermissionsSafely(new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, PERMISSION_REQUEST_CODE);
    }
}


 private void loadGallery() {
    Intent choose = new Intent(Intent.ACTION_PICK,
            MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
    startActivityForResult(choose, PICK_IMAGE_GALLERY);
}


  @Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
    switch (requestCode) {

        case PERMISSION_REQUEST_CODE:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                loadGallery();
            }
            break;
    }
}


  @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == PICK_IMAGE_GALLERY) {
        if (resultCode == Activity.RESULT_OK) {
        Uri selectedImage = data.getData();
        }
    }
}

和:

  @TargetApi(Build.VERSION_CODES.M)
public void requestPermissionsSafely(String[] permissions, int requestCode) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        requestPermissions(permissions, requestCode);
    }
}

@TargetApi(Build.VERSION_CODES.M)
public boolean hasPermission(String permission) {
    return Build.VERSION.SDK_INT < Build.VERSION_CODES.M ||
            checkSelfPermission(permission) == PackageManager.PERMISSION_GRANTED;
}

推荐阅读