|
FORUMS PROFESSIONNELS WINDEV, WEBDEV et WINDEV Mobile |
| | | | | |
| [WM26 Android 11] Accès à l'espace de stockage du smartphone, erreur sous Android 11 |
| Débuté par info, 17 juin 2021 10:20 - 8 réponses |
| |
| | | |
|
| |
| Posté le 17 juin 2021 - 10:20 |
Bonjour,
Pour les besoins de mon application je stocke des données locales dans une base Hyperfile classique. Depuis toujours, afin d'éviter la perte de ces données en cas d désinstallation de l'application je les stocke dans un dossier :
</storage/emulated/0/MonApp/Datas/>.
Avantage de cette solution même si l'utilisateur désinstalle l'application il ne perd pas ses données. Autre avantage le dossier reste facilement accessible pour par exemple copier ces données lors d'un changement de matériel et ce sans aucune synchronisation externe.
Mais voilà au passage sous Android 11 cela me génère un beau message d'erreur lorsque je souhaite créer mes fichiers.
Voici le message d'erreur :
===== Erreur ===== Date et heure=17/06/2021 09:22:05 Message=Impossible de créer le fichier </storage/emulated/0/MonApp/Datas/MonFichier.ndx>. Message système=Que s'est-il passé ? Impossible de créer le fichier </storage/emulated/0/MonApp/Datas/MonFichier.ndx>.
Code erreur : 70150 Niveau : erreur fatale Code erreur WD55 : 150
Code d'erreur système : 1 Message d'erreur système : Operation not permitted Module : libwd260hf.so (01F260100j - 26.0.313.0)
Je précise que le test est fait en déploiement direct sans passer par le play store dans un premier temps.
Existe t'il une solution pour utiliser un répertoire externe?
Je précise que bien entendu les autorisations, READ_EXTERNAL_STORAGE et WRITE_EXTERNAL_STORAGE sont bien activées.
SI pas de solution comment permettre la non perte des données en cas de désinstallation ou vidage du cache de l'application. Chez certains clients les données peuvent résulter des centaines d'heures de collecte de connées, donc inimaginable de les ressaisir!
Par avance merci pour votre aide. |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 935 messages |
|
| Posté le 17 juin 2021 - 12:17 |
| |
| |
| | | |
|
| | |
| |
| Posté le 17 juin 2021 - 14:22 |
J'ai vu ce billet de la part de PCSoft, donc en gros aujourd'hui il est absolument impossible de "protéger" des données crées en local sur le périphérique contre la désinstallation ou le vidage mémoire de l'application!? C'est une véritable régression ... |
| |
| |
| | | |
|
| | |
| |
| Posté le 17 juin 2021 - 16:07 |
tu devrais le RELIRE.... Il ne dit pas que c'est IMPOSSIBLE, juste que c'est beaucoup plus strict et que les endroit ou tu peux sont beaucoup plus limités...
Il explique aussi COMMENT récupérer un emplacement autorisé |
| |
| |
| | | |
|
| | |
| |
| Posté le 18 juin 2021 - 10:20 |
J'ai bien lu tout cela, problèmes: Si on utilise le répertoire de l'application et on désinstalle on perd toutes les données, Si on efface le cache on perd toutes les données.
Si on mets les données dans un dossier autorisé style "Documents"...
Si on désinstalle l'application on n'accède plus au données en la réinstallant!
Résultat si on a une base de données locale on ne peut pas la protéger efficacement en cas de désinstallation ou vidage du cache!
C'est une forte régression dans mon cas! |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 1 210 messages |
|
| Posté le 20 juin 2021 - 08:07 |
Salut Cézame Je suis dans le même cas que toi ! Ça fait pitié que les grosses têtes Google n'imagine pas notre situation (je dois dire que nous sommes peut-être les deux seuls à avoir ce besoin !). Si seulement il y avait moyen de lancer du code de l'application quand celle-ci se désinstalle, on pourrait dans un zip de la base et la charger en FTP vers un site perso et demander à l'utilisateur s'il vaut récupérer sa base au premier lancement de la mise à jour.
As-tu essayé l'usage d'une carte SD dans le téléphone avec stockage de la base dessus ?
Bref , actuellement, je fais un test pour savoir où stocker ma base (ou la retrouver, sniff!).
Au tout début du code init du projet je fais :
SI Droite("000"+SysVersionAndroid(sysVersionNuméro),3)<"011" ALORS gsRepRacine= SysRepStockageExterne (gnNumStockageExterne, ssePublic ) SINON gsRepRacine=SysRepStockageExterne (gnNumStockageExterne, sseAppDocument ) FIN gsRepRacineApp= gsRepRacine+[fSep()]+"fr.saxrub.wnat_mobile"+[fSep()]
M'étant agacé avec Google/PCSoft pendant 3 mois (décembre à mars) avec la fameuse restriction ACCESS_BACKGROUD_LOCATION, je n'ai pas essayé de demander MANAGE_EXTERNAL_STORAGE !
Je vais le faire dans ma prochaine mise à jour, sachant que la dernière mise à jour 26 100j offre de nouvelles instructions liées aux demandes d'autorisation.
A suivre |
| |
| |
| | | |
|
| | |
| |
Membre enregistré 3 775 messages |
|
| Posté le 20 juin 2021 - 09:11 |
salut pascal, j'ai vu dans ton message que tu met ton nom de package en dur dans ton code Moi aussi j'ai souvent besoin de mettre celui ci dans mon code cependant j'ai remarqué que fRepEnCours() contenait toujours celui-ci voici mon code:
Procedure MonNomPackage() sContenu est une chaîne sRepEnCours est une chaîne sMonNomPackage est une chaîne
sRepEnCours = fRepEnCours()
sMonNomPackage = Remplace(sRepEnCours,fExtraitChemin(fRepExe(),fRépertoire),"")
sMonNomPackage = Remplace(sMonNomPackage,fExtraitChemin(sRepEnCours,fFichier),"")
sMonNomPackage = DécomplèteRep (sMonNomPackage) sContenu = sMonNomPackage
RENVOYER sContenu voilà si ça peut servir |
| |
| |
| | | |
|
| | |
| |
| Posté le 21 juin 2021 - 10:31 |
Bonjour Pascal,
En effet lorsqu'on utilise une BDD locale pour faire des relevés ou enregistrer des tracés par exemple sur le terrain il est primordial de protéger ces données. Un simple vidage mémoire ou désinstallation de l'application peut faire tout perdre à l'utilisateur. L'utilisation du MANAGE_EXTERNAL_STORAGE me semble encore plus contraignant que le ACCESS_BACKGROUD_LOCATION encore. Je ne me suis pas encore penché sur les contraintes pour faire accepter une application avec le MANAGE_EXTERNAL_STORAGE sur le play store. Et sans le MANAGE_EXTERNAL_STORAGE impossible de protéger les données de l'utilisateur. J'ai opté provisoirement pour la même solution que toi en gardant la même structure sur les appareils Android 10 et inférieur et en optant pour le répertoire de l'application pour Android 11 et >. En revanche je n'ai pas opté pour la carte SD car cela implique que forcément l'utilisateur final doit en avoir une et aujourd'hui avec les capacités mémoire des nouveaux smartphones c'est de moins en moins le cas. De plus en utilisant un dossier externe il est beaucoup plus facile pour l'utilisateur de sauvegarder ses données ou les transférer avec un simple PC. Je pense qu'on a deux applications qui utilisent les mêmes fonctionnalités même si la finalité est tout autre... |
| |
| |
| | | |
|
| | |
| |
| Posté le 31 mars 2026 - 01:39 |
a écrit :
Bonjour Pascal,
En effet lorsqu'on utilise une BDD locale pour faire des relevés ou enregistrer des tracés par exemple sur le terrain il est primordial de protéger ces données. Un simple vidage mémoire ou désinstallation de l'application peut faire tout perdre à l'utilisateur. L'utilisation du MANAGE_EXTERNAL_STORAGE me semble encore plus contraignant que le ACCESS_BACKGROUD_LOCATION encore. Je ne me suis pas encore penché sur les contraintes pour faire accepter une application avec le MANAGE_EXTERNAL_STORAGE sur le play store. Et sans le MANAGE_EXTERNAL_STORAGE impossible de protéger les données de l'utilisateur. J'ai opté provisoirement pour la même solution que toi en gardant la même structure sur les appareils Android 10 et inférieur et en optant pour le répertoire de l'application pour Android 11 et >. En revanche je n'ai pas opté pour la carte SD car cela implique que forcément l'utilisateur final doit en avoir une et aujourd'hui avec les capacités mémoire des nouveaux smartphones c'est de moins en moins le cas. De plus en utilisant un dossier externe il est beaucoup plus facile pour l'utilisateur de sauvegarder ses données ou les transférer avec un simple PC. Je pense qu'on a deux applications qui utilisent les mêmes fonctionnalités même si la finalité est tout autre... |
| |
| |
| | | |
|
| | | | |
| | |
| | |
| |
|
|
|