Office Hours Transcript: 2021-08-19

Kai_H joined


kai_h2 joined


Kai_H left

Trying the beta now :)


hi, Kai!


sorry for the delay


I’m multitasking, and this task had been pre-empted


how can I help you today?



I wanted to share some pictures with my app today and it told me that it doesn’t have access to the file system.




My text was deleted before I could send it.


Anyway, I found the following in my Manifest:
<!-- Read files from sdcard --> <!-- TICKET-123 Permission not needed anymore starting with API 30 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"


I think I’ve misunderstood "READ_EXTERNAL_STORAGE" in Android 11/API 30.

they made a mess out of all of this, and I’m not sure I understand it myself anymore

Could you please clarify for me when and how it is needed going forward from API 30




If YOU don’t understand it anymore, I wonder who still does…

I have largely given up on trying to have some holistic view of all of this – at this juncture, I focus on specific problems


so… where is this file that you are trying to share, and how did you get the path to the file?

I was in the gallery on an emulator for API 30, selected two pictures, "share with" and then selected my app.

that should have triggered ACTION_SEND_MULTIPLE, where you would get two content Uri values, one per picture


if my analysis is correct, how are you using those Uri values?

Uh… looks at code



so, that gives you the Uri objects themselves — are you sharing them yourself via ACTION_SEND_MULTIPLE? or what are you doing with the Uri objects, once you have them, that is leading to this error?

This is done in the "onCreate" of a "HandleFilesActivity". We put them in a variable called "list" and then then return from "onCreate" to… I have no idea :)

That does not give me a lot to go on. Ideally, you would just share those Uri values. IOW, if you are accepting Uri objects from outside and sending Uri objects back to the outside, your app should have no need to ever read the content pointed to by those Uri values, and permissions should not come into play.

Why should it have no need to read the content?


Yes, it’s sparse. I’m still tring to understand the code. It’s undocumented

Think of a desktop OS. If you drag-and-drop some file from a desktop file manager (File Explorer, Finder, Nautilus, etc.) into some program, the file manager does not need to read the content of the file.

Yes, but we eventually wanna do that, as we upload things to a server and whatnot.


Which is another, later step.

And that’s fine. Make sure that you are either only using those Uri objects in the misnamed HandleFilesActivity, or you pass them along to other activities carefully and with the correct flags:


and, reading the content from those Uri objects should never involve the filesystem, so you should not get an error related to filesystem permissions


for uploading to a server, there are recipes for doing that using just a Uri:

I just found this gem:
// check for file access
if (!AndroidUtils.hasPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE))


Which might be the solution to my mystery

OK, that checks to see if you have that permission, presumably


but, you know where you are getting the Uri objects initially, and you know where your code is crashing


you need to trace through your code to understand how you are getting from Point A to Point B


and, you need to determine why you are doing any filesystem operations here, because so far, I haven’t heard anything that should involve the filesystem

Those come later. I assumed they came in this step, but apparently it’s just a literal check for the permission


Which I didn’t expect


Tbh, I came here because I knew my understanding of READ_EXTERNAL_STORAGE is lacking. I didn’t look into the code beforehand.


And I didn’t expect it was so foobared that even you couldn’t give holistic advice anymore. Damn.

unfortunately, I have been rather "heads down" for the past 1.5 years and haven’t been fussing with a lot outside of what I need to


so, I am rusty on the issue

Ok. What did you do instead?

um, I have been helping a consulting client


their app does not presently have the need to read content from the device, which means I haven’t been working on this specific area that is causing you grief

If I remove that check, it works flawlessly, at least for my test case.


I am gonna create a ticket and bugger my boss…


I have another question about Accounts on Android. I don’t really get how they are secured and if App "Oscar" can access the Account data of App "Mathilde" or not.

I have avoided AccountManager throughout my Android career, so I cannot really comment upon it

I think I have asked about this before and got a similar answer :)


But it was worth a shot

early on, it was not very well documented and seemed extremely opinionated in its implmentation


I am uncertain that it got much better


and I can’t remember the last app that I encountered that used it, though I’m not a big consumer of apps that need accounts



Thanks for your answers

sorry I could not be of more direct assistance today

That’s ok


It’s good to have someone to talk technical about and ask questions.

I’m happy to help!


that’s a wrap for today’s chat — the next one is Saturday in the 4pm US Eastern time slot


have a pleasant day!