不能挑选图片的画廊。结果code总是取消 [英] Cant pick picture from gallery. Result code always cancelled

查看:178
本文介绍了不能挑选图片的画廊。结果code总是取消的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

的完整code我的片段

    public class ProfileEditPictureFragment extends BaseFragment implements OnClickListener {
    private ImageView imageView = null;
    private Button buttonPick = null;
    private Button buttonSave = null;
    private Button buttonCancel = null;
    private File tempFile = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        this.setRetainInstance(true);

        this.sessionProfilePreferences = new SessionProfilePreferences(this.getActivity());
        this.sessionLoginPreferences = new SessionLoginPreferences(this.getActivity());
        this.sessionLoginSingleton = SessionLoginSingleton.getInstance(this.getActivity());

        String state = Environment.getExternalStorageState();

        if (Environment.MEDIA_MOUNTED.equals(state)) {
            this.tempFile = new File(Environment.getExternalStorageDirectory(), "temp_photo.jpg");
        }
        else {
            this.tempFile = new File(this.getActivity().getFilesDir(), "temp_photo.jpg");
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_profile_picture_edit, container, false);
    }

    @Override
    public void onViewCreated(View view, Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        this.imageView = (ImageView) view.findViewById(R.id.profile_picture_edit_imageview_photo);
        this.buttonPick = (Button) view.findViewById(R.id.profile_picture_edit_button_pick);
        this.buttonPick.setOnClickListener(this);
        this.buttonSave = (Button) view.findViewById(R.id.profile_picture_edit_button_save);
        this.buttonSave.setOnClickListener(this);
        this.buttonCancel = (Button) view.findViewById(R.id.profile_picture_edit_button_cancel);
        this.buttonCancel.setOnClickListener(this);
    }

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

        Log.v("ProfileEditPicture", "requestCode: " + requestCode);
        Log.v("ProfileEditPicture", "resultCode: " + resultCode);
        Log.v("ProfileEditPicture", "data: " + data);

        Bitmap bitmap = null;

        if(resultCode == Activity.RESULT_OK) {
            if (requestCode == Globals.REQUEST_PICK_PHOTO) {
                try {
                    InputStream inputStream = this.getActivity().getContentResolver().openInputStream(data.getData());
                    FileOutputStream fileOutputStream = new FileOutputStream(this.tempFile);

                    Helper.copyStream(inputStream, fileOutputStream);

                    fileOutputStream.close();
                    inputStream.close();

                    this.startCropImage();
                } catch (Exception e) {}
            } else if (requestCode == Globals.REQUEST_CROP_PHOTO) {
                String path = data.getStringExtra(CropActivity.IMAGE_PATH);

                if (path == null) {
                    return;
                }

                bitmap = BitmapFactory.decodeFile(this.tempFile.getPath());

                this.imageView.setImageBitmap(bitmap);
            }
        }
    }

    @Override
    public void onClick(View view) {
        switch(view.getId()) {
        case R.id.profile_picture_edit_button_pick : {
            this.pickPicture();
        } break;
        case R.id.profile_picture_edit_button_save : {

        } break;
        case R.id.profile_picture_edit_button_cancel : {
            this.getActivity().finish();
        }
        }
    }

    private void pickPicture() {
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
        intent.setType("image/*");

        this.startActivityForResult(Intent.createChooser(intent, "Select Picture"), Globals.REQUEST_PICK_PHOTO);
    }

    private void startCropImage() {
        Intent intent = new Intent(this.getActivity(), CropActivity.class);
        intent.putExtra(CropActivity.IMAGE_PATH, this.tempFile.getPath());
        intent.putExtra(CropActivity.SCALE, true);
        intent.putExtra(CropActivity.ASPECT_X, 3);
        intent.putExtra(CropActivity.ASPECT_Y, 2);

        this.startActivityForResult(intent, Globals.REQUEST_CROP_PHOTO);
    }
}

结果code 总是 0 ,数据总是。权限设置ofcourse。

But the resultCode is always 0 and the data is always null. Permissions are set ofcourse.

那么,怎样才能挑我图片来自画廊?

我与Android 5.0.1测试它的Nexus 4

I test it on Nexus 4 with Android 5.0.1

推荐答案

尝试ACTION_PICK这样

Try ACTION_PICK like this

Intent galleryIntent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(galleryIntent, RESULT_LOAD_IMG);

和对活动结果

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 selectedImage = data.getData();
            String[] filePathColumn = { MediaStore.Images.Media.DATA };


            Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);

            cursor.moveToFirst();

            int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
            imgDecodableString = cursor.getString(columnIndex);
            cursor.close();
            ImageView imgView = (ImageView) findViewById(R.id.imgView);

            imgView.setImageBitmap(BitmapFactory
                    .decodeFile(imgDecodableString));

        } else {
            Toast.makeText(this, "You haven't picked Image",
                    Toast.LENGTH_LONG).show();
        }
    } catch (Exception e) {
        Toast.makeText(this, "Something went wrong", Toast.LENGTH_LONG)
                .show();
    }

}

这篇关于不能挑选图片的画廊。结果code总是取消的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆