数据不会从Google Photo Intent android返回

时间:2017-02-04 20:36:01

标签: android android-intent

我一直在尝试将Google照片应用中的图片加载到我的应用程序中。当我在Google相册中选择图片时,我的应用程序崩溃,但如果我从图库应用程序中选择图像,则可以正常运行。请问我错过了什么?在下面找到我的代码。

itemImage.setOnClickListener(new Button.OnClickListener() {
        @Override
        public void onClick(View v) {
            pickImage();
        }

    });


public void pickImage() {
    // Create intent to Open Image applications like Gallery, Google Photos
    Intent galleryIntent = new Intent(Intent.ACTION_PICK,
            android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);

    galleryIntent.putExtra("crop", "true");
    galleryIntent.putExtra("outputX", 100);
    galleryIntent.putExtra("outputY", 100);
    galleryIntent.putExtra("scale", true);
    galleryIntent.putExtra("return-data", true);

    // Start the Intent
    startActivityForResult(galleryIntent, 1);
}

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

    super.onActivityResult(requestCode, resultCode, data);

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

        try {

            //Uri uri = data.getData();

            Bitmap bmp = (Bitmap) data.getExtras().get("data");

            itemImage.setImageBitmap(bmp);

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
            byte[] b = baos.toByteArray();
            String encodedImageString = Base64.encodeToString(b, Base64.DEFAULT);

            byte[] bytarray = Base64.decode(encodedImageString, Base64.DEFAULT);
            bmimage = BitmapFactory.decodeByteArray(bytarray, 0,
                    bytarray.length);

        } catch (Exception e){}

    }

}

我稍微调整了一下代码。现在我可以导入Gallery和Photos应用程序上的所有图像,但相机图像除外。请参阅下面的新代码:

public void pickImage() {
    // Create intent to Open Image applications like Gallery, Google Photos
    // Create intent to Open Image applications like Gallery, Google Photos
    Intent galleryIntent = new Intent(Intent.ACTION_PICK);
    galleryIntent.setType("image/*");
    startActivityForResult(galleryIntent, 1);
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);

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

        try {

            //Uri uri = data.getData();

            final Uri uri = data.getData();
            final InputStream imageStream = getActivity().getContentResolver().openInputStream(uri);
            final Bitmap bmp = BitmapFactory.decodeStream(imageStream);
            itemImage.setImageBitmap(bmp);

            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            bmp.compress(Bitmap.CompressFormat.PNG, 100, baos);
            byte[] b = baos.toByteArray();
            String encodedImageString = Base64.encodeToString(b, Base64.DEFAULT);

            byte[] bytarray = Base64.decode(encodedImageString, Base64.DEFAULT);

            /*bmimage = BitmapFactory.decodeByteArray(bytarray, 0,
                    bytarray.length);*/


        } catch (Exception e){}



    }


}

0 个答案:

没有答案