Android - 如何从片段中选择和显示图像?

Android - How can I choose and display image from within fragment?

我一直在尝试选择并在我的片段上显示图像,但它似乎不起作用。

我下面的代码启动并带我到我的画廊,但是当我点击图片时,我的应用程序崩溃并给我一个错误:

 Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);

错误:

java.lang.RuntimeException: Failure delivering result ResultInfo{who=null, request=131073, result=-1, data=Intent { dat=content://media/external/images/media/19394 (has extras) }} to activity {com.mycompany.e_planner/com.mycompany.e_planner.MyActivity}: java.lang.SecurityException: Permission Denial: reading com.android.providers.media.MediaProvider uri content://media/external/images/media/19394 from pid=29204, uid=10011 requires android.permission.READ_EXTERNAL_STORAGE, or grantUriPermission()

这是我的代码:

public class Venue1 extends Fragment {

private int PICK_IMAGE_REQUEST = 1;

public Venue1() {
}


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View V = inflater.inflate(R.layout.fragment_venue1, container, false);

    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);

    return V;
}

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

    if (requestCode == PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {

        Uri uri = data.getData();

        try {
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);
            // Log.d(TAG, String.valueOf(bitmap));

            ImageView imageView = (ImageView)getActivity().findViewById(R.id.imageView);
            imageView.setImageBitmap(bitmap);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
}

好吧,这个错误很容易解释。您需要请求权限 android.permission.READ_EXTERNAL_STORAGE。只需将它添加到您的 manifest file.

在清单文件中添加读取外部存储的权限

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>