[Interest] Save / load file contents on android

Nuno Santos nuno.santos at imaginando.pt
Fri Sep 3 15:33:07 CEST 2021


But doesn’t QStandardPath resolve to different locations depending if legacyExternalStorage is enabled or not?

> On 3 Sep 2021, at 13:51, Jérôme Godbout <jgodbout at dimonoff.com> wrote:
> 
> Take care with the eternal storage opt out will no more be possible after November. We will need to target SDK 12 to publish to the store. So the 11 opt out flag will no more be possible (November for existing application, for new application it’s already started since august).
>  
> Try to push an update asap so your user can migrate the data to the application proper folder. Other application cannot access the files anymore. If your file are already into the application data folder you do not have to worry much you still can access them easily.
>  
> But the QStandard path have work fine for us so far.  You can check the actual path it resolve to on this page (scroll a bit down to see the path for Android):
> https://doc.qt.io/qt-5/qstandardpaths.html#StandardLocation-enum <https://doc.qt.io/qt-5/qstandardpaths.html#StandardLocation-enum>
>  
>  
>  
> From: Interest <interest-bounces at qt-project.org> on behalf of ekke <ekke at ekkes-corner.org>
> Date: Friday, September 3, 2021 at 5:47 AM
> To: Nuno Santos <nuno.santos at imaginando.pt>
> Cc: Qt Interest <interest at qt-project.org>
> Subject: Re: [Interest] Save / load file contents on android
> 
> Hi Nuno,
>  
> Am 03.09.21 um 11:05 schrieb Nuno Santos:
> Ekke, 
>  
> I have been experiencing some inconsistencies with Android file access using QStandardPaths, mostly now that I’m preparing the ground for Android 11 support. From Android 11 onwards, there will be changes in the way an app can access filesystem resources.
>  
> This problem started when one of apps was in some systems using legacy file access while in others was already using the new storage approach. In order to temporary fixes this issues I have set the requestLegacyExternalStorage to true, however, soon this will end as in Android 11 it will be ignored. 
> I'm in the same situation as you ;-) have set requestLegacyExternalStorage ATM
> 
> last weeks had much work moving all my projects from Qt 5.13.2 to 5.15.5, so I can prepare for Qt 6.2
> 
> now there will be 3 weeks vacation
> 
> then support of Android 11 file storage will be high on my TODO list
> 
> ... and hoping then to find some docs / tips HowTo support this from Qt ;-)
> 
> ekke
> 
>  
> One of the current challenges I’m facing the moving/copying resources from legacy storage to new storage when using QStandardPaths and QFileDialog.
>  
> How have you been handling Android 11 support and data migration from older versions?
>  
> Are you able to do it just with Qt stuff or do you need to handle some of the things with native android API’s?
>  
> Thanks!
>  
> Nuno
>  
> On 31 Aug 2021, at 13:38, ekke <ekke at ekkes-corner.org <mailto:ekke at ekkes-corner.org>> wrote:
>  
> Am 31.08.21 um 14:12 schrieb Wilhelm Meier via Interest:
> Hi all,
>  
> does anybody have a minimum working example how to load / save json file
> contents (auscii contents) to / from a file on android.
>  
> I made several attempts, but I get weird filenames and I'm not able to
> load the stored file.
>  
> thx
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org <mailto:Interest at qt-project.org>
> https://lists.qt-project.org/listinfo/interest <https://lists.qt-project.org/listinfo/interest>
> Hi,
> some snippets HowTo save a JSON. use QVariantMap for a JSON Object or QVariantList for JSON Array
>  
>     QJsonDocument jda = QJsonDocument::fromVariant(myQVariantMap);
>     QByteArray buffer = jda.toJson();
>     saveTestFile("_my_test.json", buffer);
> ...
>  
> void DataServer::saveTestFile(const QString& fileName, const QByteArray& buffer)
> {
>     QString filePath = mDataManager->dataPath(fileName);
>     QFile saveFile(filePath);
>     if (!saveFile.open(QIODevice::WriteOnly)) {
>         qWarning() << "Couldn't open file to write " << filePath;
>         return;
>     }
>     qint64 bytesWritten = saveFile.write(buffer);
>     saveFile.close();
>     qDebug() << "Bytes written: " << bytesWritten << " to: " << filePath;
> }
> ....
>  
>     // Android: AppDataLocation works out of the box, iOS you must create the DIR first !!
>     mDataRoot = QStandardPaths::standardLocations(QStandardPaths::AppDataLocation).value(0);
>     mDataPath = mDataRoot+"/data/";
> ----
> and reading is similar
>  
>     jda = QJsonDocument::fromJson(dataFile.readAll());
>     dataFile.close();
>     if(!jda.isArray()) {
>         myMap = jda.toVariant().toMap();
>     } else {
>     myList = jda.toVariant().toList();
>     }
> -----
> hope it helps
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org <mailto:Interest at qt-project.org>
> https://lists.qt-project.org/listinfo/interest <https://lists.qt-project.org/listinfo/interest>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20210903/8e35e00f/attachment-0001.html>


More information about the Interest mailing list