正在上传 Google 照片中的照片,而不是 android 中的图库和文件管理器

Uploading Photos from Google Photos but not from gallery and file manager in android

我正在尝试从 SD 卡拍摄照片,当用户从 google 照片中选择但从任何其他应用程序(如图库或文件管理器)中选择时出现 curserindexoutofbound 错误时,它可以正常工作。这是一段代码。

OnActivity 结果 ` { if (requestCode == PICK_IMAGE_REQUEST && resultCode == Activity.RESULT_OK && data != null && data.getData() != null) { uri uri = null; String realPath = null;

        try
        {
            uri = data.getData();
            Log.e("uri",uri.toString());
            Bitmap bitmap = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), uri);

            imageView.setImageBitmap(bitmap);

            String imagePath = getRealPathFromURI(uri);

            File source = new File(imagePath);

            String destinationPath = Environment.getExternalStorageDirectory().toString() + "/IASFolders/"+Configuration.empcode+".jpg";



            File destination = new File(destinationPath);
            try
            {
                InputStream in = new FileInputStream(source.getAbsolutePath());
                OutputStream out = new FileOutputStream(destination.getAbsolutePath());

                byte[] buf = new byte[1024];
                int len;
                while ((len = in.read(buf)) > 0)
                {
                    out.write(buf, 0, len);
                }

                in.close();
                out.close();

            }
            catch (IOException e)
            {
                e.printStackTrace();
                Log.d("File Copy Exception", e.toString());
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

}

`{getRealPathFromURI 函数

private String getRealPathFromURI(Uri contentURI) {
    String result;
    Cursor cursor = getActivity().getContentResolver()
            .query(contentURI,new String[]{MediaStore.Images.Media.DATA},MediaStore.Images.Media.DISPLAY_NAME+"=?" ,new String[]{Configuration.empcode},null);

    /*
    * Cursor imageCursor=getContentResolver().query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,new String[]{MediaStore.Images.Media.DATA},MediaStore.Images.Media.DISPLAY_NAME+"=?" ,new String[]{imageTitle},null);
                    imageCursor.moveToFirst();
                    String imageData=imageCursor.getString(imageCursor.getColumnIndex(MediaStore.Images.Media.DATA));
                    Long imageSize=imageCursor.getLong(imageCursor.getColumnIndex(ImageColumns.SIZE));
                    Toast.makeText(getApplicationContext(), String.valueOf(imageSize), Toast.LENGTH_LONG).show();*/
    if (cursor == null)
    {
        result = contentURI.getPath();
    }
    else
    {
        cursor.moveToFirst();
        int idx = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
        result = cursor.getString(idx);
        cursor.close();
    }
    return result;
}

}`

这样试试

//while setting Intent
   if (Build.VERSION.SDK_INT <= 19) {
                                            Intent intent = new Intent();
                                            intent.setType("image/*");
                                            intent.setAction(Intent.ACTION_GET_CONTENT);
                                            intent.addCategory(Intent.CATEGORY_OPENABLE);
                                            startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE);
                                        } else if (Build.VERSION.SDK_INT > 19) {
                                            Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
                                            startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE);


                }


                // get result after selecting image from Gallery
                @Override
                public void onActivityResult(int requestCode, int resultCode, Intent data) {
                    super.onActivityResult(requestCode, resultCode, data);

                    if (requestCode == PICK_IMAGE && resultCode == getActivity().RESULT_OK && null != data) {
                        Uri selectedImageUri = data.getData();
                        String selectedImagePath = getRealPathFromURIForGallery(selectedImageUri);
                        decodeFile(selectedImagePath);
                    }
                }

                public String getRealPathFromURIForGallery(Uri uri) {
                    if (uri == null) {
                        return null;
                    }
                    String[] projection = {MediaStore.Images.Media.DATA};
                    Cursor cursor = getActivity().getContentResolver().query(uri, projection, null, null, null);
                    if (cursor != null) {
                        int column_index = cursor
                                .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
                        cursor.moveToFirst();
                        return cursor.getString(column_index);
                    }
                    return uri.getPath();
                }     
                  // decode image
                public void decodeFile(String filePath) {
                    // Decode image size
                    BitmapFactory.Options o = new BitmapFactory.Options();
                    o.inJustDecodeBounds = true;
                    BitmapFactory.decodeFile(filePath, o);
                    // The new size we want to scale to
                    final int REQUIRED_SIZE = 1024;
                    // Find the correct scale value. It should be the power of 2.
                    int width_tmp = o.outWidth, height_tmp = o.outHeight;
                    int scale = 1;
                    while (true) {
                        if (width_tmp < REQUIRED_SIZE && height_tmp < REQUIRED_SIZE)
                            break;
                        width_tmp /= 2;
                        height_tmp /= 2;
                        scale *= 2;
                    }

                    // Decode with inSampleSize
                    BitmapFactory.Options o2 = new BitmapFactory.Options();
                    o2.inSampleSize = scale;
                    bitmap = BitmapFactory.decodeFile(filePath, o2);
                    Security connection = new Security(context);
                    Boolean isInternetPresent = connection.isConnectingToInternet(); // true or false
                    if (isInternetPresent) {
                        // submit usr information to server
                        //first upload file
                        updateUserProfileImage();
                        Log.i("IMAGEPATH", "" + imagePath);
                    }
                    profileImageView.setImageBitmap(bitmap);
                }