Android11 również umożliwia zapis do dowolnego folderu, jedynie wymaga specjalnego uprawnienia oraz działania użytkownika przed pierwszym użyciem:
Declare the MANAGE_EXTERNAL_STORAGE permission in the manifest.
Use the ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION intent action to direct users to a system settings page where they can enable the following option for your app: Allow access to manage all files.
To do this, you would need an extension. Unfortunately, if you want to put your app in the google store with this permission, google will probably reject your app. Special apps such as anti-virus programs, file managers, etc. may have this permission.
More here:
Regular apps can write files without any permission in the ASD directory (app specific directory). Unfortunately, it is only suitable for files used only in your app, temporary files, databases, etc. When, for example, your app takes pictures and you want to be able to view these pictures in other programs, and also if you do not want the pictures to be deleted when your deinstall app, it is not a good choice of storage location.
Android 11 also offers the option of saving in other folders, but these are folders predefined for a given file type, for example:
Images, including photographs and screenshots, which are stored in the DCIM / and Pictures / directories. The system adds these files to the MediaStore.Images table.
Videos, which are stored in the DCIM /, Movies /, and Pictures / directories. The system adds these files to the MediaStore.Video table.
Audio files, which are stored in the Alarms /, Audiobooks /, Music /, Notifications /, Podcasts /, and Ringtones / directories, as well as audio playlists that are in the Music / or Movies / directories. The system adds these files to the MediaStore.Audio table.
Downloaded files, which are stored in the Download / directory. On devices that run Android 10 (API level 29) and higher, these files are stored in the MediaStore.Downloads table. This table isn't available on Android 9 (API level 28) and lower.
More here:
and here:
Ai2 is not yet api level 30 targeted, so it does not yet include the appropriate tools for saving files for android 11. We have to wait until the end of summer to see what MIT comes up with. If this is not enough for the users, I think there will be appropriate extensions to save files in all ways.
Btw, the Explorer app doesn't declare these permissions in the Manifest and its targetSdkVersion is still 29 (Android 10).
It declares android:requestLegacyExternalStorage="true" in the Manifest, which will be ignored when apps must target API 30 (Aug 2021 for new apps and Nov 2021 for updates).
It declares <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> that is no longer available on Android 11 (targetSdkVersion=30).
My phone was upgraded to android 11, my apps that read and write on Documents folder run well, If I understand well they will stop to run in Aug 2021 for new apps and Nov 2021 for updates. Is it correct ?
Yes that is correct, because writing in the folder /storage/emulated/0/Documents/ will no longer work on devices with Android ≥ 10 when AI2 is targeting Android 11.
There is currently no component that can save files in the external storage on devices with Android ≥ 10 (outside of the ASD, with the exception of the File component with Legacy mode; however, this is ignored under Android 11). In this respect, @patel must have used an extension for saving files in the external storage on devices with Android ≥ 10.
However, this is no longer possible under Android 11 (targetSdkVersion=30), because WRITE permission no longer exsits under Android 11. Therefore it will stop working on devices with Android ≥ 10 when AI2 targets Android 11 (Aug 2021).
It would really help if you provided a screenshot of your relevant blocks, so we can see what you are trying to do, and where the problem may be.
To get an image of your blocks, right click in the Blocks Editor and select "Download Blocks as Image". You might want to use an image editor to crop etc. if required. Then post it here in the community.
It is pretty simple. My local file procedure where i write or read or check for presence, must start with File1.LegacyMode True in order for File1 to work. It was recommended by you or Anke a few months back with the warning that it was going to stop working in a few month.
I guess a few months was yesterday. On err i check my blocks and LegacyMode block was floating by itself. It was not connected to a File1 control, so AI2 doesnt recognize it any more.
I deleted LegacyMode block and error warning disappeared but rest of File1 blocks failed, can't read/write or check for presence.
This is apparently an error of omission transitioning into nb187 File Scope handling.
There should probably be some extra code at app load time to transition the old blocks and attributes to the new system.
P.S. some manual conversion guidance from @ewpatton would help here in the meantime.
So the bad LegacyMode block is my fault. I marked the method as deprecated and the blocks editor handles this differently than it used to. I will need to write an upgrader to handle this correctly. In the meantime, you will want to replace the LegacyMode block with this: