【问题标题】:Uploading Photos from Google Photos but not from gallery and file manager in android从 Google 相册上传照片,但不从 android 中的图库和文件管理器上传照片
【发布时间】:2016-04-13 06:21:39
【问题描述】:

我正在尝试从 sdcard 中拍照,如果用户从谷歌照片中进行选择,但在从画廊或文件管理器等任何其他应用程序中选择时会出现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;
}

}`

【问题讨论】:

    标签: android photo-gallery


    【解决方案1】:

    这样试试

    //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);
                    }
    

    【讨论】:

    猜你喜欢
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 2012-05-28
    • 2012-01-25
    相关资源
    最近更新 更多