Open a Google Drive File Content URI after using KitKat Storage Access Framework

后端 未结 3 439
野趣味
野趣味 2020-12-04 10:11

I am using the Storage Access Framework for android 4.4 and opening the file picker.

Everything works except when choosing a file from Google Drive, I can only figur

相关标签:
3条回答
  • 2020-12-04 10:54

    Ok. I found that the right way is to use the input stream from the other posts in conjunction with some data from the contentresolver.

    For reference here are the hard to find android docs: https://developer.android.com/training/secure-file-sharing/retrieve-info.html

    The relevant code to get mimetype, filename, and filesize:

    Uri returnUri = returnIntent.getData();
    String mimeType = getContentResolver().getType(returnUri);
    Cursor returnCursor =
            getContentResolver().query(returnUri, null, null, null, null);
    int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
    int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE);
    returnCursor.moveToFirst();
    TextView nameView = (TextView) findViewById(R.id.filename_text);
    TextView sizeView = (TextView) findViewById(R.id.filesize_text);
    nameView.setText(returnCursor.getString(nameIndex));
    sizeView.setText(Long.toString(returnCursor.getLong(sizeIndex)));
    

    And to get the file contents:

    getContentResolver().openInputStream(uri)
    

    Hope this helps someone else.

    0 讨论(0)
  • 2020-12-04 11:07

    Adding to @Keith Entzeroth answer , after getting fileName, fileSize and Input Stream , this is way to get the file

     public static File getFile(final Context context, final Uri uri) {
            Log.e(TAG,"inside getFile==");
            ContentResolver contentResolver = context.getContentResolver();
            try {
                String mimeType = contentResolver.getType(uri);
                Cursor returnCursor =
                        contentResolver.query(uri, null, null, null, null);
                int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
                int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE);
                returnCursor.moveToFirst();
                String fileName = returnCursor.getString(nameIndex);
                String fileSize = Long.toString(returnCursor.getLong(sizeIndex));
                InputStream inputStream =  contentResolver.openInputStream(uri);
    
    
                File tempFile = File.createTempFile(fileName, "");
                tempFile.deleteOnExit();
                FileOutputStream out = new FileOutputStream(tempFile);
                IOUtils.copyStream(inputStream,out);
                return tempFile;
    
              }catch (Exception e){
                e.printStackTrace();
                return null;
            }
        }
    
    0 讨论(0)
  • 2020-12-04 11:08

    this code solved my problem, when i tried to select image from google drive ,app get crashed ,

     private void setImagePath(Intent data) throws Exception {
    
            String wholeID="";
            Uri selectedImage = data.getData();
            if(Build.VERSION.SDK_INT<=Build.VERSION_CODES.JELLY_BEAN_MR2){
                wholeID=getUriPreKitkat(selectedImage);
            }else  {
                wholeID = DocumentsContract.getDocumentId(selectedImage);
    
            }
    
            // Split at colon, use second item in the array
            Log.i("debug","uri google drive "+wholeID);
            String id = wholeID.split(":")[1];
    
            String[] column = {MediaStore.Images.Media.DATA};
    
            // where id is equal to
            String sel = MediaStore.Images.Media._ID + "=?";
    
            Cursor cursor = getActivity().getContentResolver().
                    query(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
                            column, sel, new String[]{id}, null);
    
    
            int columnIndex = cursor.getColumnIndex(column[0]);
    
            if (cursor.moveToFirst()) {
                filePath = cursor.getString(columnIndex);
            }
            cursor.close();
    
        }
    
    0 讨论(0)
提交回复
热议问题