cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Announcements
Learn all about apps and Dropbox integrations to make working from home easy here!

Dropbox API Support & Feedback

Find help with the Dropbox API from other developers.

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Android ACTION_GET_CONTENT from Dropbox sources

Android ACTION_GET_CONTENT from Dropbox sources

Andhie W.
New member | Level 1

Device OS: Lollipop 5.0

When using the Intent ACTION_GET_CONTENT and selecting Dropbox from the Storage Provider, Dropbox prompts a file picker dialog to choose from. The result obtained in onActivityResult is something like

file:///storage/emulated/0/Android/data/com.dropbox.android/files/u6763728/scratch/Camera%20Uploads/2012-04-02%2012.34.44.jpg

The requesting app will not have read permission as its dropbox own private directory even with WRITE_EXTERNAL_STORAGE permission. In KitKat, it is recommended to use FileProvider to share a file via a content:// uri

26 Replies 26

Re: Android ACTION_GET_CONTENT from Dropbox sources

Greg-DB
Dropboxer

Thanks for the report! I'm sending this along to the right people.

Re: Android ACTION_GET_CONTENT from Dropbox sources

Michael G.89
New member | Level 1

Any update on this? I've run into the same issue.

Re: Android ACTION_GET_CONTENT from Dropbox sources

Greg-DB
Dropboxer

Apologies, no update right now. I'll check in with the right people again.

Re: Android ACTION_GET_CONTENT from Dropbox sources

Craig M.21
New member | Level 2

Has this been fixed recently? I did not run in to permission issues using the following code to initiate download...

Intent intent = new Intent(Intent.ACTION_GET_CONTENT);

intent.setType("*/*");

startActivityForResult(intent, PICKFILE_RESULT_CODE );    

The uri returned in onActivityResult was this:

file:///storage/emulated/0/Android/data/com.dropbox.android/files/scratch/Kanji%20Sketch%20Pad/KanjiKnowledge.ks

Processing the data in onActivityResult required a bit of a workaround for Dropbox, which I'll mention in a separate thread, but my app read the file okay. Does the issue only appear under certain circumstances?

Re: Android ACTION_GET_CONTENT from Dropbox sources

Craig M.21
New member | Level 2

I should add, I am using Android 5.0.2, device is HTCOne,

Re: Android ACTION_GET_CONTENT from Dropbox sources

Greg-DB
Dropboxer

Still no news on potentially using content:// instead yet, but I'll ask engineering if something changed about the existing behavior/any guidance.

Re: Android ACTION_GET_CONTENT from Dropbox sources

Greg-DB
Dropboxer

Thanks for your patience Craig. I heard back from engineering here with the following information:

  • FLAG_GRANT_READ_URI_PERMISSION seems to have no effect.
  • On Android API level 18 (and presumably probably below), specifying READ_EXTERNAL_STORAGE or WRITE_EXTERNAL_STORAGE does not matter. The calling app is able to read the file irrespective of these settings.
  • On Android API level 19 and above, the calling app needs the READ_EXTERNAL_STORAGE or WRITE_EXTERNAL_STORAGE permission to be able to read the data provided by us.

Also, on Android API level 19 and above caller will need to read the data using the ContentResolver#openInputStream(fileUri) method to be able to read the files. While on API level 18 and below directly creating the file object to read the file works.

Re: Android ACTION_GET_CONTENT from Dropbox sources

Craig M.21
New member | Level 2

Thanks for that. I have not had any problems with reading the file. I am therefore unsure what the problem was that the other posters met.

 

I have read and write permissions set.

 

I initially used code like this (based on suggestions found online):

 

ParcelFileDescriptor mInputPFD = null ;
           try {
                mInputPFD = getContentResolver().openFileDescriptor(returnUri, "r");
           } catch (FileNotFoundException e) {
                e.printStackTrace();
                System.out.println("File not found...");
                return;
           }
if(mInputPFD!=null){
    fd = mInputPFD.getFileDescriptor();           
     FileInputStream fis = new FileInputStream(fd);
    //process the input stream
}

 

I tried the more direct method suggested above and it also worked:

 

FileInputStream fis = null ;
    try {
            fis = (FileInputStream) getContentResolver().openInputStream(returnUri);
    }
    catch (FileNotFoundException e1) {
             e1.printStackTrace();
             System.out.println("File not found...");            
             return ;
    }

 //process the input stream

 

I am using targeted Android API 19.

 

Can I assume that the ContentResolver#openInputStream(fileUri) method will also work on API 18 and lower?

Re: Android ACTION_GET_CONTENT from Dropbox sources

Greg-DB
Dropboxer

openInputStream was added in API level 1 and is documented to support both content and file schemes, so it looks like it should work.

Poll
How do you get refocussed while working from home? Do you find any of these options keep you from getting distracted?
Who's talking

Top contributors to this post

What do Dropbox user levels mean?
Need more support?