get path from Google Drive URI

后端 未结 3 913
庸人自扰
庸人自扰 2021-02-04 11:49

I\'m using Android file selection and selecting files from app storage (images, videos, documents). I have an function \"getPath\" . Im getting path from uri. I have no problem

3条回答
  •  花落未央
    2021-02-04 12:13

    Get file path from Google Drive we can easily access by Using File Provider by using following steps Code is working fine.
    
    1) Add provider path in AndroidManifest file inside Applcation Tag.
    
            
                
                    
    
                    
                
            
            
                
            
        
    
    
    2) provider_paths.xml
    
    
    
        
        
        
        
    
    
    3)FileUtils.java
    
    public class FileUtils {
        private static Uri contentUri = null;
     @SuppressLint("NewApi")
        public static String getPath(final Context context, final Uri uri) {
            // check here to KITKAT or new version
            final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;
            // DocumentProvider
            if (isKitKat && DocumentsContract.isDocumentUri(context, uri))
              {
                / MediaProvider
                 if (isMediaDocument(uri)) {
                     if (isGoogleDriveUri(uri)) {
                    return getDriveFilePath(uri, context);
                }
    
    
              }
          }
    
    4) isGoogleDriveUri method 
    
      private static boolean isGoogleDriveUri(Uri uri) {
            return "com.google.android.apps.docs.storage".equals(uri.getAuthority()) || "com.google.android.apps.docs.storage.legacy".equals(uri.getAuthority());
        }
    
    5)getDriveFilePath method 
     private static String getDriveFilePath(Uri uri, Context context) {
            Uri returnUri = uri;
            Cursor returnCursor = context.getContentResolver().query(returnUri, null, null, null, null);
            /*
             * Get the column indexes of the data in the Cursor,
             *     * move to the first row in the Cursor, get the data,
             *     * and display it.
             * */
            int nameIndex = returnCursor.getColumnIndex(OpenableColumns.DISPLAY_NAME);
            int sizeIndex = returnCursor.getColumnIndex(OpenableColumns.SIZE);
            returnCursor.moveToFirst();
            String name = (returnCursor.getString(nameIndex));
            String size = (Long.toString(returnCursor.getLong(sizeIndex)));
            File file = new File(context.getCacheDir(), name);
            try {
                InputStream inputStream = context.getContentResolver().openInputStream(uri);
                FileOutputStream outputStream = new FileOutputStream(file);
                int read = 0;
                int maxBufferSize = 1 * 1024 * 1024;
                int bytesAvailable = inputStream.available();
    
                //int bufferSize = 1024;
                int bufferSize = Math.min(bytesAvailable, maxBufferSize);
    
                final byte[] buffers = new byte[bufferSize];
                while ((read = inputStream.read(buffers)) != -1) {
                    outputStream.write(buffers, 0, read);
                }
                Log.e("File Size", "Size " + file.length());
                inputStream.close();
                outputStream.close();
                Log.e("File Path", "Path " + file.getPath());
                Log.e("File Size", "Size " + file.length());
            } catch (Exception e) {
                Log.e("Exception", e.getMessage());
            }
            return file.getPath();
        }
    

提交回复
热议问题