PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Stockage fichier impossible.
Stockage fichier impossible.
Débuté par Guest781227, 27 juil. 2017 09:56 - 9 réponses
Membre enregistré
6 messages
Popularité : +1 (1 vote)
Posté le 27 juillet 2017 - 09:56
Bonjour,

Je conçois actuellement une application qui génère un PDF (en faisant appel à un webservice), je stocke le fichier dans un Buffer puis ensuite je le sauvegarde sur le disque pour enfin le lire dans la visionneuse PDF du mobile.

Ce que j'ai développé fonctionne très bien via le simulateur, mais sur mobile non.

La partie sauvegarde sur le disque ne fonctionne pas, il m'est impossible sur mon smartphone de lire le PDF stocké dans le répertoire : fRepDonnées() ou fRepExe() ou encore fRepEnCours(). J'ai remarqué aussi que je n'avais pas accès sur mobile à ces répertoires... Ne faut-il pas être super-utilisateur ?

Pour info, la permission WRITE_EXTERNAL_STORAGE est bien activé lors de la génération du projet, et fSauveBuffer() ne renvoie pas d'erreur.

J'ai également une question : Est-il possible sous WinDev de lire à la volée le fichier PDF (qui est directement chargé dans la mémoire sans passer par une sauvegarde sur le disque) ?

Merci de votre aide.
Membre enregistré
199 messages
Popularité : +14 (16 votes)
Posté le 27 juillet 2017 - 14:07
Bonjour,

J'ai déjà eu un cas similaire. Malgré la permission "WRITE_EXTERNAL_STORAGE" je ne pouvais écrire dans la mémoire du Smartphone.
La solution, dans mon cas, était : Sur la smartphone, dans paramètres -> Applications -> Paramètres Applications (la petite roue dentée) -> Autoris.des Applis -> Stockage et là autoriser mon application à gérer le stockage.

--
Bon développement

Pierre Devillers
Membre enregistré
6 messages
Popularité : +1 (1 vote)
Posté le 28 juillet 2017 - 12:15
Il n'y a pas une autre solution? c'est vraiment gênant.
Membre enregistré
151 messages
Popularité : +7 (7 votes)
Posté le 28 juillet 2017 - 13:03
Bonjour,

notez qu'à partir de Android 6 vous devez explicitement demander les permissions, les fonctions WinDev s'occupent de ça, mais si vous utilisez du Java ou s'il y a un bug dans une des fonction WinDev alors vous devez ouvrir la fenêtre de demande d'autorisation à la main.

Pour tester une permission par exemple :

ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)


Pour ouvrir manuellement la fenêtre de demande de permission à l'utilisateur :

requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);


Je vous laisse voir sur le site Android Developpers pour plus d'informations.
Membre enregistré
6 messages
Popularité : +1 (1 vote)
Posté le 28 juillet 2017 - 19:23
Merci de votre réponse Gael ! :)
Posté le 10 septembre 2020 - 20:01
Bonsoir,

cette solution m'a l'aire d'être intéressant mais malgré avoir mis WRITE_EXTERNAL_STORAGE et READ_EXTERNAL_STORAGE

et en créant un une procédure java
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);


J'ai cette erreur:

Erreur retournée :
:compileDebugJavaWithJavacJ:\Android\Gen\src\com\xxx\scanpal\wdgen\GWDCPProceduresGlobales.java:1819: error: package Manifest does not exist
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
                                        ^
J:\Android\Gen\src\com\xxx\scanpal\wdgen\GWDCPProceduresGlobales.java:1819: error: cannot find symbol
requestPermissions(new String[]{Manifest.permission.READ_EXTERNAL_STORAGE},MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE);
                                                                           ^
  symbol:   variable MY_PERMISSIONS_REQUEST_READ_EXTERNAL_STORAGE
  location: class GWDCPProceduresGlobales
Note: J:\Android\Gen\src\com\xxx\scanpal\wdgen\GWDCPProceduresGlobales.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
2 errors
 FAILED

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':compileDebugJavaWithJavac'.
Compilation failed; see the compiler error output for details.

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 13s
16 actionable tasks: 6 executed, 10 up-to-date
Membre enregistré
3 334 messages
Popularité : +93 (137 votes)
Posté le 11 septembre 2020 - 15:21
import android.Manifest;
Membre enregistré
795 messages
Popularité : +40 (42 votes)
Posté le 13 septembre 2020 - 13:12
Bonjour. Je ne pense pas que ce soit un problème de stockage, mais plutôt un problème d'accès. Pour des raisons de sécurité, les fichiers qu'une application stocke dans ses dossiers ne sont accessibles que par l'application elle-même. Les autres applications du téléphone ne peuvent pas y accéder. Si dans votre cas vous voulez ouvrir le PDF avec Acrobat, Acrobat ne pourra pas lire le fichier. La seule solution est de créer un dossier "externe" qui s'accroche à la racine du stockage interne du téléphone (pour cela ils ont les autorisations WRITE/READ_EXTERNAL_STORAGE) qui sont nécessaires à partir de certaines versions d'Android. Bien entendu, vous devez tenir compte du fait que ces dossiers peuvent être accessibles par toute autre application installée sur l'appareil.

Rubén
Membre enregistré
964 messages
Popularité : +16 (20 votes)
Membre enregistré
201 messages
Popularité : +6 (10 votes)
Posté le 23 septembre 2020 - 15:00
Si tout à fait !
Et au delà de la target cible dans le manifeste, sous Androïd 10 il semblerait qu'on ne puisse plus accéder aux repertoires en dehors de ceux de l'application
Du coup comment on fait pour partager des fichiers entre plusieurs applications ??

--
Ce n'est pas l'outil le plus important mais la manière de s'en servir