SAF: App Inventor implementation of Storage Access Framework

I forget to mention that direct child's id should be obtained using GetTreeDocumentId method.

4 Likes

Sorry, I used the wrong block :upside_down_face:

3 Likes

OK that all works. :+1:

Is there no way then, in order to get started, other than the user going into their file manager and granting a permission, to get the root or other folder (tree)? (Open Document Tree)

Perhaps a uri for the ASD ?

I can see how one can traverse through a file list to find sub (folders) trees, and then list files again and so on. An image component accepts a content uri to display an image. Is this going to be the same for other components needing a file?

4 Likes

No, user must grant access through Documents Picker.

I am not sure about this.
Image component works fine.
Same should be correct for audio and video player.

4 Likes

Understood :slight_smile:

4 Likes

SAF is only needed for → non-media files. Media files (jpg, png, mp3, m4a, mp4,...) can be accessed from all paths (outside of the ASD or privateDir) with READ permission.

5 Likes

The question was just about the content uri being read by other components, e.g. it works with the image component:

not had a chance to test some of the others yet.

4 Likes

Could you please provide an example of how one uses the flags in order to set persistent permissions? I presume this saves the user having to visit the document picker again when restarting the app?

4 Likes

With this extension you really have to bite through and some users might lose teeth in the process. :wink: :grinning:

6 Likes

I am prepared to champion those users, in order to save their teeth ;), and ask Sunny how all the various elements of this extension work.

5 Likes

Sure, here it is:

Also data gets kind of binded to the app and you don't lose access to it even after multiple reboots.

5 Likes

Epic work :star_struck: :+1:

5 Likes

Thank you..:+1:

3 Likes

What is the syntax for setting an initialDir?
image

Whatever I put in here, I am just taken to the last location I selected in the document picker ?

Ah, i just tried a full uri and this worked, e.g.

content://com.android.externalstorage.documents/tree/primary%3A/document/primary%3AMusic

opened at the Music folder

will this part be the same on all devices:

content://com.android.externalstorage.documents/tree/primary%3A/document/primary%3A

If I select the ASD I get a different path:

content://com.android.externalstorage.documents/tree/primary%3AAndroid%2Fdata%2Fedu.mit.appinventor.aicompanion3%2Ffiles/document/primary%3AAndroid%2Fdata%2Fedu.mit.appinventor.aicompanion3%2Ffiles

this is all using the companion...

5 Likes

Yes, it doesn't matter whether there is an empty string or a special path there.

4 Likes

... and you cannot select

  1. the root dir of the external storage /storage/emulated/0 and
  2. /Download

But you can select /Downloads.

4 Likes

If anyone want to create a
empty folder after selecting the in "open Document Tree" by using "create document" .
then mimetype is following
....
vnd.android.document/directory

3 Likes

This

image

doesn't work

This returns the root dir (/storage/emulated/0) equivalent

2 Likes

I was also hoping that these blocks would return a list of just files, but it also returns directories. I must be missing something? (I also tried around the other way using the IsTreeUri block, but that also returns files and directories)...

2 Likes

As I said,

But you cannot select this path / dir.

2 Likes