[Free] JewelFilePicker Extension : Pick Any Type Of File From Storage

Thanks a lot, are there examples on how to do this?

Show your blocks.

And tell us if the CSV file was created by your app. If not, as @Taifun said you must use SAF on Android 11+. EDIT: But then you can't pick a non-media file from the Shared folder /Download, but from the non-shared folder /Downloads. (see my post #37)

See also here:

I have to admit, I don't really get along with the SAF -extension, maybe my knowledge therefore is just too limited. With only the documentation provided I am not able to simply open a csv-file (I want to write the data in a Database later).

and the csv wasn't created by the app.

This is all you need:

Note:
And I've to correct myself, because if you use the OpenSingleDocument block, you can also pick a non-media file from the Shared folder /Download. (But you cannot open (select) the folder itself using OpenDocumentTree.)

2 Likes

For some strange reason FilePicker is at the heart of a problematic Project file corruption:

Snap1

Has anyone hit this problem before? Is it the fault of this extension alone or did it clash with another extension?

My guess is, the extension can't be used anymore because of the new file picker component of the new release, see also
https://appinventor.mit.edu/ai2/ReleaseNotes.html

  • New FilePicker component (Android only at the moment)

EDIT: the extension needs to be renamed else it can'tbe used anymore...
Also there are still some open questions...

Taifun

2 Likes

Will it work at all Android API levels?

1 Like

Yes, the extension is tested with Android API 33.
(Thanks)

1 Like

This extension is now free.

4 Likes

It should also be possible to pick files from the ASD on Android 11+, right?

I tested it with Companion & APK on Android 13:

2 Likes

I've renamed the extension from FilePicker to JewelFilePicker to prevent conflicts with the in-built component.

1 Like

You can also pick a file from /data/user/0/<packageName>/shared_prefs in the internal storage, e.g. this TinyDB.xml and read and/or copy it.

Of course, it is not necessary to specify the exact directory beforehand. You can also navigate there from the PrivateDir.

the extension you are using is not the same as in first post of this topic?

Correct. I had raised the question of why it shouldn't be possible to pick files from hidden directories (like ASD on Android 11+ or PrivateDir in the internal storage). And apparently it is possible.

1 Like

I would like to import an mp3 file to an app I made. But I'm having awful difficulties. Here are my blocks. What stupid mistake have I made?

Looks like you are only setting a filename to the Source, when you perhaps need a full or absolute path

Also, unless your mp3 is only a few seconds long, you need to use a Player component instead of a Sound component.

You should have mentioned that you changed your extension because the picked files are now always copied to a subfolder in the PrivateDir and the absolute path is returned in the .FilePicked event, e.g.:
/data/user/0/edu.mit.appinventor.aicompanion3/files/JewelFilePicker/jarsigner.txt

However, this cannot be processed by most components (including the File component) because most of them use a relative path.

In addition, if a text file has been selected that is to be edited afterwards, this file can no longer be accessed via the FilePicker because this directory is just as invisible as the ASD on Android 11+. The edited test file would therefore have to be copied (moved) back to one of the shared folders in order to continue to have access to this file via a FilePicker.

Incidentally, the other components (and extensions) that do not use a relative path only have access to the PrivateDir if a full path is used.

1 Like

Yes, the sound is only a few seconds long. When I use filePath the result comes back as a numeral not as text.
Will try again using path to get it to play. Thanks for your help.

14 posts were split to a new topic: How to get a list of mp3 files and play them?