PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2025 → Ecriture carte SD Android KitKat
Ecriture carte SD Android KitKat
Débuté par richard.marchand, 14 sep. 2014 09:57 - 32 réponses
Posté le 14 septembre 2014 - 09:57
Bonjour à tous,

J’ai une application qui est installée dans un répertoire de la mémoire interne et afin de conserver le maximum de place sur celle-ci, l’ensemble des fichiers externes comme les photos, vidéos étaient stockées sur la carte SD dans un répertoire et plusieurs sous-répertoires.

J’avais que des utilisateurs sous Android version 4.2.2 (Jelly Bean) et la semaine dernière, j’ai des utilisateurs qui ont mis à jour leur tablette TAB 3 avec la version 4.4.2 (KitKat).

Je me suis aperçu que je n’arrivais pas à écrire sur la carte SD !!! Donc pas possible de mettre à jour les photos, vidéos.

J’ai creusé sur plusieurs forums, en faites cette version Android KitKat a imposé de grosses restrictions concernant les permissions d’écriture sur les cartes SD en supprimant le pont entre la mémoire interne et la mémoire externe de l’appareil. Une mesure qui empêche notamment les applications d’écrire sur les cartes SD puisque celles-ci ne peuvent plus inscrire de données dans un autre répertoire que celui qui leur est alloué.

Après vérification, avec cette nouvelle version Android KitKat, nous avons la possibilité d’écrire sur la carte SD dans le dossier /Android/data/ com.le-nom-du-package.

J’aimerai créer le dossier sur la carte SD à la génération de l’application Android, un dossier avec le nom du package sous le dossier /Android/data/

J’ai essayé de déposer un fichier à la création de l’APK afin créer le dossier sur la carte SD, je n’y arrive pas.

Avez-vous eu le problème ? Comment vous l’avez résolu ?
Membre enregistré
1 330 messages
Posté le 15 septembre 2014 - 06:57
Salut Richard,

As-tu essayé de mettre les fichiers dans /Android/data/com.lenomdupackage/Files car tous les répertoires de ma carte contiennent soit "Files", soit "Cache" (qui doit être réservé pour l'appli) soit les deux.

A+
Daryl

--
http://www.concept4u2.com
Posté le 15 septembre 2014 - 09:53
Bonjour Daryl,

Merci pour ta réponse.

Oui je n'arrive pas à créer ce dossier sur la carte SD automatiquement : "/storage/extSdCard/Android/data/com.societe.fdv/" à la génération de l'APK ou directement à l'ouverture de l'application.
Pour info, si je crée manuellement le dossier sur la carte SD, je peux soit créer un dossier ou déposer un fichier.

Richard
Membre enregistré
1 330 messages
Posté le 15 septembre 2014 - 14:12
Salut Richard,

Je ne connais pas ton code, mais si tu essaies ceci, est-ce que ça fonctionne ?

nEtat est un entier
sRep est une chaîne

nEtat = SysEtatCarteStockage()
SI nEtat = sysCarteDisponible ALORS
sRep = SysRepCarteStockage()
// Création d'un fichier sur la carte de stockage
fCrée(ComplèteRep(sRep) + "monFichier.txt")
FIN


A+
Daryl

--
http://www.concept4u2.com
Membre enregistré
4 messages
Posté le 15 septembre 2014 - 17:42
Daryl,

Je teste ce soir et je reviens vers toi.

Merci encore,

--
Richard
Membre enregistré
4 messages
Posté le 16 septembre 2014 - 10:12
Bonjour Daryl,

J'ai essayé ta solution et cela ne fonctionne pas. Le dossier et le fichier ne sont pas créer sur la carte SD.

Je ne vois pas comment résoudre mon problème.

Richard

--
Richard
Membre enregistré
4 messages
Posté le 16 septembre 2014 - 10:24
Daryl,

Pour info j'ai tracé le résultat de :
nEtat=1
sRep=/Storage/emulated/0

Il a bien créer le fichier sur la mémoire interne et non sur la carteSD .

Richard

--
Richard
Membre enregistré
2 messages
Posté le 24 octobre 2014 - 09:44
Bonjour Richard,

je développe une application Android qui synchronise des documents et je suis également contraint que ces donnés soit stocker sur la carte SD.
Pour le moment j'arrive a contourner le problème vus que cette application est installer sur une nouvelle flotte de téléphone qui passe par notre services, cependant J'aimerais savoir si tu as réussi a trouver une solution autre que de créer manuellement le répertoire sur chaque smartphone ?
Membre enregistré
4 messages
Posté le 24 octobre 2014 - 10:48
Bonjour Elka,

Je n'ai pas trouvé la solution pour créer sur la carte SD un dossier à l'installation, par contre, j'ai trouvé la solution pour écrire sur la carte SD (Création d'un répertoire, d'un sous-répertoire et déposer des fichiers) avec cette nouvelle version KitKat, tu peux seulement le faire dans le dossier /Android/data/ "Le nom de l'application"/.

J'espère t'avoir aidé,

Richard

--
Richard
Posté le 16 novembre 2014 - 18:19
Bonjour je relance ce sujet

Comment avez vous écrit sur la carte SD sous android Kitkat ?

J'ai testé différentes méthodes, impossible d'y parvenir. je me retrouve systématiquement sur la mémoire interne.

Cela me pose un gros problème pour la synchronisation avec un pc.
Posté le 05 décembre 2014 - 10:09
Un petit up !

Etes vous parvenu à écrire (même en manuel sur la carte SD ? (ne serais ce que copier un fichier par programmation)
Posté le 05 décembre 2014 - 10:25
A lire :
http://www.androidpolice.com/2014/02/17/external-blues-google-has-brought-big-changes-to-sd-cards-in-kitkat-and-even-samsung-may-be-implementing-them/

si vous trouvez un bon code java ou wlangage qui gère la carte Sd
je suis preneur

Je ne sais même pas si la version 20 résout le problème
Posté le 05 décembre 2014 - 19:19
Bjr,

popoy a exposé le 05/12/2014 :
A lire :
http://www.androidpolice.com/2014/02/17/external-blues-google-has-brought-big-changes-to-sd-cards-in-kitkat-and-even-samsung-may-be-implementing-them/

si vous trouvez un bon code java ou wlangage qui gère la carte Sd
je suis preneur

Je ne sais même pas si la version 20 résout le problème


J'écris sur la carte SD (ou alors c 'est bien imité :-)) ) en WM19
sur un Sony Xperia Z3 sous kitkat.

Voila le code que j'ai en init projet :
rep_sd est une chaîne =
ComplèteRep(SysRepCarteStockage())+"/android/data/com.ctcsoft.ctc-tournee/tournee/journees/"

SI fRepCrée(rep_sd) = Faux ALORS
Erreur("Pas de rep sur la sd") // ca ne passe pas ici
SINON
// info("c bon pour la sd ") // desactivé pour pas chaque fois...
FIN
SI SysEtatCarteStockage() = sysCarteDisponible ALORS
// .... .
SINON
// Pas de carte de stockage et ca ne passe pas ici non plus
Erreur("Il n'y a pas de carte de stockage disponible en écriture sur
cet appareil")
FIN

Je viens de re tester pour etre sur, lors d'une execution, j'ecris 4
fichiers sur "rep_sd"
Lors d'une 2eme execution, je transfère ces 4 fichiers depuis rep_sd
vers un serveur ou je les vois arriver.

Par contre, un examen avec les explorateurs de fichiers (pas fait par
moi, le Sony est chez mon fils) on a pas trouvé le repertoire en
question.
Donc le doute subsiste certes, mais l'utilisation est permise.

Qu'en pensez-vous ?
a plus

--
-------------------------------------------------------------
www.ctc-soft.com
Gestion biblo-documentaire (free-share)
Comptabilité shareware
Logiciels de Gestion de saisie terrain
Spécialisé Tournées de boulangers
-------------------------------------------------------------
Posté le 06 décembre 2014 - 00:10
que te renvoit
info(SysRepCarteStockage())
il se peut qu'il te renvoit l'emulation de la carte

En effet j'ai lu sur une autre question du forum

La fonction SysRepCarteStockage() renvoie:
- version Androïd inférieure à 4.1: le chemin de la carte SD.
- version Androïd 4.1 et inférieure à 4.3: le chemin de la mémoire interne du téléphone par défaut, cependant il est possible en modifiant les paramètres de stockage du téléphone de choisir la carte SD comme "support de stockage par défaut".
- version Androïd 4.3... : le chemin de la mémoire interne du téléphone.
Posté le 07 décembre 2014 - 21:19
popoy a écrit :
que te renvoit
info(SysRepCarteStockage())
il se peut qu'il te renvoit l'emulation de la carte

En effet j'ai lu sur une autre question du forum

La fonction SysRepCarteStockage() renvoie:
- version Androïd inférieure à 4.1: le chemin de la carte SD.
- version Androïd 4.1 et inférieure à 4.3: le chemin de la mémoire interne du téléphone par défaut, cependant il est possible en modifiant les paramètres de stockage du téléphone de choisir la carte SD comme "support de stockage par défaut".
- version Androïd 4.3... : le chemin de la mémoire interne du téléphone.


C'est tout le problème! C'est ce que renvoi la fonction SysRepCarteStockage().
Google nous dit en substance : "les applications ne requièrent plus de permission pour lire/écrire en internet ou externe tant qu'il s'agit du dossier "privé" de l'application elle même (android/data/com.monappli)

Le souci c'est que je n'arrive pas à voir ce dossier sur la carte SD avec aucune fonction puisque je ne vois pas la carte SD.

si qqun a trouvé la solution je suis preneur.
Posté le 08 décembre 2014 - 08:48
Bjr,

Mat a formulé ce dimanche :

si qqun a trouvé la solution je suis preneur.


Oui, mais la solution a quel probleme, puisqu'on peut "y" copier et "y"
lire, enfin manipuler , par programme, tout ce qu'on veut, il reste
quoi comme probleme.
Android est un cachotier, on ne sait deja pas ou il met l'appli, donc
c'est pareil.

a plus

--
-------------------------------------------------------------
www.ctc-soft.com
Gestion biblo-documentaire (free-share)
Comptabilité shareware
Logiciels de Gestion de saisie terrain
Spécialisé Tournées de boulangers
-------------------------------------------------------------
Posté le 08 décembre 2014 - 15:47
Pour essayer d'avancer sur le problème d’écrire sur la carte sd
j'ai lu que cela n'essessite la permission
WRITE_EXTERNAL_STORAGE
et
Par exemple, l'application avec le nom de package com.example.foo peut désormais accéder librement à
Android/data/com.example.foo/ sur les périphériques de stockage externes sans autorisations

Il y a de nouvelles fonctions Java
Context.getExternalFilesDirs(), Context.getExternalCacheDirs(), et Context.getObbDirs().

Source : https://source.android.com/devices/storage/

Reste plus qu'a savoir le chemin de la carte Sd car selon les fabriquant ce chemin peut être différent

example de chemins possible :
/sdcard/
/storage/emulated/0
/storage/extSdCard/
/storage/sdcard0/
/storage/emulated/legacy/
/mnt/sdcard/external_SD
/mnt/emmc
/mnt/extSdCard
/mnt/sdcard/

Je pourrait testé sur chacun des chemins, le problème est que la liste est incomplète.
Posté le 08 décembre 2014 - 15:50
Dc on sait où Android met l'application c'est dans /data/data/nom du package
J'ai vérifié avec un cyanogen mod
Membre enregistré
62 messages
Posté le 08 décembre 2014 - 16:35
Bonjour,
Je ne sais pas si ça peut vous aider concernant la fonction SysRepCarteStockage() je vous transmet la réponse que m'a donné l'assistance PC SOFT au mois de juillet.

La fonction SysRepCarteStockage() renvoie:
- version Androïd inférieure à 4.1: le chemin de la carte SD.
- version Androïd 4.1 et inférieure à 4.3: le chemin de la mémoire interne du téléphone par défaut, cependant il est possible en modifiant les paramètres de stockage du téléphone de choisir la carte SD comme "support de stockage par défaut".
- version Androïd 4.3... : le chemin de la mémoire interne du téléphone, il n'est plus possible de connaître le chemin de la carte SD et donc d'écrire dessus.

Cordialement,
Posté le 08 décembre 2014 - 16:40
Bjr,

popoy a utilisé son clavier pour écrire :
Dc on sait où Android met l'application c'est dans /data/data/nom du package
J'ai vérifié avec un cyanogen mod


Oui, je voulais dire, on s'en fout un peu, reste a faire pareil avec la
sd.
J' essaierai d'avoir l'info "SysRepCarteStockage()" des que je peux sur
un kitkat.

a plus

--
-------------------------------------------------------------
www.ctc-soft.com
Gestion biblo-documentaire (free-share)
Comptabilité shareware
Logiciels de Gestion de saisie terrain
Spécialisé Tournées de boulangers
-------------------------------------------------------------
Posté le 08 décembre 2014 - 19:35
Bjr,

"Cédric" a utilisé son clavier pour écrire :
- version Androïd 4.3... : le chemin de la mémoire interne du téléphone, il
n'est plus possible de connaître le chemin de la carte SD et donc d'écrire
dessus.


Bon ben alors, la messe est dite, on fait comme le Android il veut et
voila.... :-)

a plus

--
-------------------------------------------------------------
www.ctc-soft.com
Gestion biblo-documentaire (free-share)
Comptabilité shareware
Logiciels de Gestion de saisie terrain
Spécialisé Tournées de boulangers
-------------------------------------------------------------
Posté le 15 décembre 2014 - 17:31
bonjour,

Je ne baisse pas les bras sur le sujet.
J'ai fait quelques recherches et je suis arrivé à la conclusion qu'il y avait surement une solution pour obtenir le chemin vers la carde sd quelque soit les versions.

Je ne suis pas développeur de métier, aussi je n'y connait rien en code JAVA.

Je me demande donc si il ne serait pas possibl de récuperer ce chein en insérant une procédure en code java natif avec un bout de code comprenant ceci:

Environment.getExternalStorageDirectory();

si un spécialiste pouvait me fournir un bout de code java pour récupérer le chemin de cette foutue carte dans le code WL.

En vous remerciant.
Posté le 16 décembre 2014 - 09:09
Bjr,

Mat a couché sur son écran :
Environment.getExternalStorageDirectory();

si un spécialiste pouvait me fournir un bout de code java pour récupérer le
chemin de cette foutue carte dans le code WL.

En vous remerciant.


Si android "trompe" les fonctions Windev, il trompera aussi du code
Java.
Je pense que les fonctions Windev de traitement de la SD sont
l'implementation directe du code Java nécessaire. Et je pense qu'il y a
des dev Java chez Pcsoft.

a plus

--
-------------------------------------------------------------
www.ctc-soft.com
Gestion biblo-documentaire (free-share)
Comptabilité shareware
Logiciels de Gestion de saisie terrain
Spécialisé Tournées de boulangers
-------------------------------------------------------------
Posté le 30 décembre 2014 - 23:49
Bonjour,

En cherchant sur de nombreux forums, j'ai trouvé un code java qui permettrait de connaitre le chemin de carte SD physique à priori pour la majorité des appareils. ( je n'ai pas testé ne sachant pas comment l'utiliser) voir : http://www.developpez.net/forums/d1429525/java/general-java/java-mobiles/android/repertoire-mnt-sdcard-tablette/

Si cela fonctionne pourrait ton récupérer le résultat dans le code WL ? (et comment ? )

Et j'en reviens au message du départ du sujet : "comment créer le dossier privé de l'application sur la SD au lancement ou à l'installation ???
Comme dit précédemment, si on le crée manuellement, aucun problème pour écrire dans ce répertoire mais pour créer le répertoire lui même... impossible.

Ces quelques questions seront peut être résolues en 2015...

Par avance bonne année à tous.
Posté le 01 janvier 2015 - 11:24
Bonjour et bonne année 2015!

J'ai résolu le problème pour mon application! ( ça ne sera pas le cas pour tous je pense...)

Le principe est le suivant : mon application étant indissociable d'une application windev sur pc j'ai mis en place des étapes de "première connexion" .

1- L'utilisateur installe l'appli PC et l'appli Android.

2- Au démarrage de l'appli Android, un message lui indique qu'il doit connecter son smartphone/tablette(en mode stockage de masse et équipé d'une carte SD) au pc en usb.

3- Dans l'appli pc, lors de la connexion de l'appareil, j'ai mis en place une procédure qui vient créer le répertoire : /Android/data/com.monapppli sur la carte SD.

4- Une fois l'USB déconnecté, l'utilisateur lance l'appli Android, et une procédure toute simple vient tester l'existence du répertoire précédemment créée (/Android/data/com.monapppli ) celui ci n'existant que sur la carte SD physique ou n'est pas accessible sur un appareil non rooter. (Android/data/data/com.monappli)

J’obtiens donc le chemin exact de la carte SD dans 99% des cas et aussi le dossier où mon application dispose des droits d'écriture/lecture est créé par l'appli pc (sans soucis de droits)

Pour mon cas, cela me permet de faire la synchronisation Smartphone/PC via USB automatiquement en utilisant la carte SD en USB. (possible aussi en insérant uniquement la carte SD...)

La manipulation n'est à faire qu'une fois pour chaque appareil (j'enregistre le chemin dans une constante).

J'espère que ça pourra en aider quelques uns.

Mat, Bricoleur du 1er janvier.
Posté le 02 janvier 2015 - 12:06
En effet, il me semble que la synchro à partir d'une application PC soit la seule solution pour l'instant sous KitKat, si l'on ne veut pas rooter sa tablette ou smartphone.

A noter que la création/mise à jour de fichier fonctionne bien sur le dossier frepencours() de l'application , par contre plus aucune possibilité de lire les vidéos ou les pdf ensuite. Ils n'apparaissent que pour l'application (le LanceAppliAssocié fonctionne, mais le lecteur pdf ou video ne trouve plus le fichier).

Du coup, je reviens à la solution SDCard, mais par quel chemin accédez vous à la carte SD une fois le smartphone branché en USB et visible depuis l'explorateur Windows ?

fCopieFichier("C:\Répertoires\Fichier.doc", "?????????" )

Merci
a+
Posté le 03 janvier 2015 - 10:05
bonjour,
Il faut bien sur que l'appli PC soit en exécution, j'ai placé dans mon code globale de fenêtre "synchro"
fDétecteStockageAmovible()
SI Action = StockageAmovibleInséré ALORS
sLettrelecteur = Lettre
Temporisation(500)


Ensuite je teste la présence du répertoire de mon application Android sur la carte SD
fRépertoireExiste(sLettrelecteur+/Android/Data/Com.Monappli/)


selon son existence, jelance la synchronisation de ma base ou je crée le répertoire
fRepCrée(sLettrelecteur+":\Android\data\com.monappli\")


Cordialement,
Mat
Posté le 07 janvier 2015 - 15:01
Bonjour à tous,

Je relance un peu le sujet car je n'arrive toujours pas à réaliser une copie sur la carte SD.
Cette fonctionnalité m'est indispensable pour la sauvegarde de fichiers en cas de plantage complet de la tablette.

J'utilise une tablette Samsung Galaxy Tab Active sous KitKat.

D'après ce que j'ai lu, il faudrait que l'application créé elle-même son répertoire sur la carte SD...Mais comment faire ?

Merci à vous
Posté le 07 janvier 2015 - 17:28
Bonjour,

Ayant passé pas mal de temps sur le sujet, le seul moyen que j'ai trouvé est de créer manuellement le fichier sur la carte SD en passant par une application PC. puis de rechercher ce répertoire depuis la tablette pour avoir le chemin exact.

j'ai vu quelques codes java comme dit précédemment (voir le lien) mais je ne sais pas intégrer ces dernier en WM.

Sinon inutile de chercher tout est déjà dit dans ce sujet.

Cordialement,
Posté le 22 janvier 2015 - 15:05
Bonjour,


A MAT
J'ai suivi avec intérêt votre façon de faire.
Question :
Votre application Android écrit-elle dans le répertoire "/Android/data/com.monapppli " de la carte SD ?

Pouvez-vous créer un sous répertoire dans "/Android/data/com.monapppli ".
J'ai constaté (pour moi) que l'instruction fRepCrée ne marche pas et en plus ne retourne même pas d'erreur.
Je pense à des problème du coté de Windev.
Des applications non Windev Mobile écrivent sans problème sur les cartes SD (au moins dans le répertoire prive "/Android/data/com.monapppli "). Donc c'est possible.

Merci.



Mat a écrit :
Bonjour et bonne année 2015!

J'ai résolu le problème pour mon application! ( ça ne sera pas le cas pour tous je pense...)

Le principe est le suivant : mon application étant indissociable d'une application windev sur pc j'ai mis en place des étapes de "première connexion" .

1- L'utilisateur installe l'appli PC et l'appli Android.

2- Au démarrage de l'appli Android, un message lui indique qu'il doit connecter son smartphone/tablette(en mode stockage de masse et équipé d'une carte SD) au pc en usb.

3- Dans l'appli pc, lors de la connexion de l'appareil, j'ai mis en place une procédure qui vient créer le répertoire : /Android/data/com.monapppli sur la carte SD.

4- Une fois l'USB déconnecté, l'utilisateur lance l'appli Android, et une procédure toute simple vient tester l'existence du répertoire précédemment créée (/Android/data/com.monapppli ) celui ci n'existant que sur la carte SD physique ou n'est pas accessible sur un appareil non rooter. (Android/data/data/com.monappli)

J’obtiens donc le chemin exact de la carte SD dans 99% des cas et aussi le dossier où mon application dispose des droits d'écriture/lecture est créé par l'appli pc (sans soucis de droits)

Pour mon cas, cela me permet de faire la synchronisation Smartphone/PC via USB automatiquement en utilisant la carte SD en USB. (possible aussi en insérant uniquement la carte SD...)

La manipulation n'est à faire qu'une fois pour chaque appareil (j'enregistre le chemin dans une constante).

J'espère que ça pourra en aider quelques uns.

Mat, Bricoleur du 1er janvier.
Posté le 09 octobre 2015 - 16:31
Bonjour à tous !
Après avoir fait pas mal de tests de mon côté, je découvre sur ce forum les mêmes conclusions que moi :

- d'après Google on peut accéder à la mémoire SD uniquement dans le répertoire de son application soit dans mon cas : storage/extSdCard/Android/data/com.monappli où com.monappli est le nom du Package déclaré dans la génération de l'application Android

Mais je rencontre les mêmes problèmes que Gérard c'est à dire que depuis l'application android :
- impossible de créer le dossier com.monappli
- si je crée ce dossier via mon ordinateur, impossible d'y créer un fichier

Avez-vous trouvé des solutions depuis le dernier post ?

Merci !
Posté le 09 octobre 2015 - 18:36
Bjr,

Lionel Perret a présenté l'énoncé suivant :
Avez-vous trouvé des solutions depuis le dernier post ?

Merci !


Ben en android 4.xx et 5.0.1 le repertoire que tu decris se crée tout
seul et des HCreationSiInexistant crée les fichiers a l'interieur...

donc ?

a plus

--
-------------------------------------------------------------
www.ctc-soft.com
Gestion biblo-documentaire (free-share)
Comptabilité shareware
Logiciels de Gestion de saisie terrain
Spécialisé Tournées de boulangers
-------------------------------------------------------------
Posté le 14 mai 2016 - 08:45
Bonjour,
Malgré l'ancienneté de ce post, je vous donne ma solution pour écrire ou plutôt copier des fichiers sur la sdcard:
faire un sysrepcartedestockage() dans une variable chaine qui va vous donner sdcard0 qui est le nom de la mémoire interne puis faite un remplace de sdcard0 par extsdCard et utiliser cette chaine pour désigner le repertoire destination à créer. Ca marche.
Merci
(Tablette galaxy tab 2) android 4.1.2