PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Communication entre plusieurs applis sur le même smartphone
Communication entre plusieurs applis sur le même smartphone
Débuté par erbl, 28 sep. 2020 09:15 - 24 réponses
Membre enregistré
201 messages
Popularité : +6 (10 votes)
Posté le 28 septembre 2020 - 09:15
Bonjour
Je me permets de faire appel à vos lumières car je rencontre un problème
Plusieurs applications que je développe doivent pouvoir communiquer entre elles sur le même smartphone
J'ai un widget qui indique la version de l'appli principal ou son changelog, permet de la lancer et de lancer l'appli de conf
Une appli de conf qui permet de gérer de la configuration, gérer les fichiers de l'appli principale, télécharger sa base HFSQL mise à jour etc.
Enfin, l'appli principale

Avant, c'était assez simple, répertoire de travail commun à la racine de l'explorateur et les trois applications lisaient / écrivaient dedans et se passaient les infos comme ça
Seulement, avec Android 10, ce n'est + possible puisqu'une application n'a le droit d'écrire et de lire QUE dans son répertoire interne ou externe prévu à cet effet.

J'ai cherché dans la documentation PC SOFT ainsi que sur le forum et je n'ai rien trouvé pour faire communiquer mes applis. La mémoire partagée n'existe pas sur Android, à ce jour je n'ai pas de solution, merci d'avance pour votre aide !

--
Ce n'est pas l'outil le plus important mais la manière de s'en servir
Membre enregistré
3 333 messages
Popularité : +93 (137 votes)
Posté le 29 septembre 2020 - 02:38
Regarde du côté des sockets
Membre enregistré
164 messages
Popularité : +10 (10 votes)
Posté le 29 septembre 2020 - 10:49
Oui, sockets et/ou intents (mais dans ce dernier cas je pense que du code Java serait nécessaire).
Membre enregistré
164 messages
Popularité : +10 (10 votes)
Posté le 29 septembre 2020 - 10:51
Il y a aussi moyen théoriquement de désactiver le faite qu'une appli ne doive écrire que dans son répertoire par une déclaration explicite dans le fichier AndroidManifest.xml, mais cette piste ne semble pas simple en WM25 (sauf erreur ou manque d'infos de ma part).
Membre enregistré
201 messages
Popularité : +6 (10 votes)
Posté le 04 novembre 2020 - 17:19
KotlinIsland a écrit :
> Il y a aussi moyen théoriquement de désactiver le faite qu'une appli ne doive écrire que dans son répertoire par une déclaration explicite dans le fichier AndroidManifest.xml, mais cette piste ne semble pas simple en WM25 (sauf erreur ou manque d'infos de ma part).
hum ça m'interesse
pas envie de faire du code java ni sockets car c'est sur le même appareil et les appli seront utilisés dans des endroits sans réseau du tout et sockets ça me semble utiliser le réseau non?

--
Ce n'est pas l'outil le plus important mais la manière de s'en servir
Membre enregistré
164 messages
Popularité : +10 (10 votes)
Posté le 04 novembre 2020 - 18:14
Une piste à utiliser dans le Manifest :


Malheureusement je n'ai pas trop de temps pour confirmer...
Mais même si cela fonctionne, cela ne sera plus supporté dans la future version Android 11 donc ça serait repousser le problème à plus tard...
Membre enregistré
164 messages
Popularité : +10 (10 votes)
Posté le 04 novembre 2020 - 18:15
Une piste à utiliser dans le Manifest :

android:requestLegacyExternalStorage="true"


Malheureusement je n'ai pas trop de temps pour confirmer...
Mais même si cela fonctionne, cela ne sera plus supporté dans la future version Android 11 donc ça serait repousser le problème à plus tard...
Membre enregistré
164 messages
Popularité : +10 (10 votes)
Posté le 04 novembre 2020 - 18:17
Membre enregistré
201 messages
Popularité : +6 (10 votes)
Posté le 06 novembre 2020 - 14:20
KotlinIsland a écrit :
Une piste à utiliser dans le Manifest :

android:requestLegacyExternalStorage="true"


Malheureusement je n'ai pas trop de temps pour confirmer...
Mais même si cela fonctionne, cela ne sera plus supporté dans la future version Android 11 donc ça serait repousser le problème à plus tard...

Pire que ça
ça fonctionne très bien pour le moment mais que avec target sdk 28
sauf que depuis 2 novembre, le minimum c'est 29 pour être autorisé sur le play store

--
Ce n'est pas l'outil le plus important mais la manière de s'en servir
Membre enregistré
164 messages
Popularité : +10 (10 votes)
Posté le 06 novembre 2020 - 17:34
Tu veux dire que la solution "android:requestLegacyExternalStorage=true" fonctionne pour le moment ou bien c'est ton application en l'état qui fonctionne pour le moment ?
Membre enregistré
201 messages
Popularité : +6 (10 votes)
Posté le 09 novembre 2020 - 08:58
KotlinIsland a écrit :
> Tu veux dire que la solution "android:requestLegacyExternalStorage=true" fonctionne pour le moment ou bien c'est ton application en l'état qui fonctionne pour le moment ?
android:requestLegacyExternalStorage=true fonctionne pour le moment mais ça ne fonctionne pas si la cible sdk est 29 hors c'est maintenant obligatoire pour déposer une appli ou mise à jour d'appli sur le playstore
à priori, on doit pouvoir écrire/lire des fichiers entre plusieurs applis grâce au media store.
https://developer.android.com/reference/android/provider/MediaStore
par contre, je vois pas trop comment c'est implémenté côté windev, vais essayer avec du code java directement

--
Ce n'est pas l'outil le plus important mais la manière de s'en servir
Membre enregistré
164 messages
Popularité : +10 (10 votes)
Posté le 09 novembre 2020 - 10:09
As-tu concrètement testé sur l'API level 29 ? Car j'avais cru comprendre que ça ne fonctionnerait plus à partir de l'API level 30 (Android 11)...
Membre enregistré
164 messages
Popularité : +10 (10 votes)
Posté le 09 novembre 2020 - 10:14
Quelques liens pour les solutions en Java :
https://developer.android.com/training/data-storage/use-cases
https://developer.android.com/training/data-storage/shared/media…
https://github.com/android/storage-samples/tree/main/MediaStore

J'avais déjà été confronté à ce soucis il y a quelques mois mais je n'ai plus les codes source. ;)
Membre enregistré
201 messages
Popularité : +6 (10 votes)
Posté le 09 novembre 2020 - 10:37
KotlinIsland a écrit :
> As-tu concrètement testé sur l'API level 29 ? Car j'avais cru comprendre que ça ne fonctionnerait plus à partir de l'API level 30 (Android 11)...
ouep, j'ai testé sur api 29 => ça marche pas
api 28 => ça fonctionne comme il faut
j'ai commencé à regarder comment le faire en java mais c'est pas si simple (surtout que les fichiers que je veux partager c'est des .in des fichiers log ou des backup hfsql c'est pas vraiment des media mais vais regarder merci pour ton aide

--
Ce n'est pas l'outil le plus important mais la manière de s'en servir
Membre enregistré
164 messages
Popularité : +10 (10 votes)
Posté le 09 novembre 2020 - 11:10
Ok super tiens nous au courant.
(N'oublie pas que tu peux échanger des données entre applications via les Intents aussi).
Membre enregistré
201 messages
Popularité : +6 (10 votes)
Posté le 09 novembre 2020 - 11:48
en utilisant SysRepStockageExterne(1 , ssePublicDocument) pour le repertoire en fait ça fonctionne ! \o/
(effectivement, je voulais juste si possible éviter de faire joujou avec du java et rester en pur windev)

--
Ce n'est pas l'outil le plus important mais la manière de s'en servir
Membre enregistré
164 messages
Popularité : +10 (10 votes)
Posté le 09 novembre 2020 - 11:56
Super ! Merci d'avoir partagée ta solution.
:merci:
Membre enregistré
201 messages
Popularité : +6 (10 votes)
Posté le 09 novembre 2020 - 12:06
KotlinIsland a écrit :
Super ! Merci d'avoir partagée ta solution.

de rien merci à toi pour tes pistes / aides

--
Ce n'est pas l'outil le plus important mais la manière de s'en servir
Membre enregistré
120 messages
Popularité : +13 (15 votes)
Posté le 10 novembre 2020 - 18:17
Bonsoir,
Merci pour le retour, mais je reviens sur le contenu de la doc Windev :

https://doc.pcsoft.fr/fr-FR/?9000195&name=Android_10__Comportement_des_applications_en_arriere_plan

Lorsque l'exécution se fait sous Android 10 et que le niveau d'API cible est en 29 :
Une application n'est plus autorisée à accéder à des fichiers situés sur le stockage externe, en dehors des répertoires spécifiques à cette application (fonction SysRepStockageExterne avec constantes sseApp*).
Les accès en lecture ou en écriture à ces fichiers échoueront. Les chemins de fichiers fixés "en dur" ou construits à partir des fonctions SysRepCarteStockage ou SysRepStockageExterne avec les constantes ssePublic* ne doivent donc plus être utilisées. Cette limitation sera définitive à partir de Android 11 lorsque le niveau d'API sera relevé à 30. Avec Android 10 et le niveau d'API 29, il y a une tolérance pour l'accès à ces emplacements, ils restent donc utilisables avec cette version de WINDEV Mobile, mais il est recommandé de prévoir les adaptations nécessaires dans les applications qui utiliseraient ces emplacements.

Si je comprends bien, ta proposition fonctionne en API 29, mais sera bloquée en API30.
Donc plus de solution viable à partir de Android 11.
Membre enregistré
164 messages
Popularité : +10 (10 votes)
Posté le 12 novembre 2020 - 09:56
Oui c'est exactement ça, merci pour ces rappels et précisions.

--
https://github.com/reuniware
https://stackoverflow.com/users/10922639/kotlinisland
Membre enregistré
3 333 messages
Popularité : +93 (137 votes)
Posté le 12 novembre 2020 - 10:08
Je rappelle que les sockets peuvent être utilisées sans que le wifi, 4g, bluetooth doit actif.
Et cela fonctionne quelques soit le système d'exploitation.
Le smartphone est en même temps serveur et client sur la boucle locale 127.0.0.1
Donc chaque application enregistre les données dans son propre dossier
Et transfert celles ci par sockets.
Il existe pas mal d'exemples dessus en windev et windev mobile.
Membre enregistré
201 messages
Popularité : +6 (10 votes)
Posté le 12 novembre 2020 - 11:09
Lionel a écrit :

Si je comprends bien, ta proposition fonctionne en API 29, mais sera bloquée en API30.
Donc plus de solution viable à partir de Android 11.


Tout à fait, après les utilisateurs sont encore sous Android 9 , on a un peu de marge. Ca permet d'avoir une solution rapide à mettre en place, tout revoir avec les sockets je pense le faire dans un deuxième temps

Popoy a écrit

> Le smartphone est en même temps serveur et client sur la boucle locale 127.0.0.1

Merci pour la précision, j'avais pas trouvé d'exemples spécifiques au local, j'ai du mal chercher, je re regarderai

--
Ce n'est pas l'outil le plus important mais la manière de s'en servir
Membre enregistré
164 messages
Popularité : +10 (10 votes)
Posté le 12 novembre 2020 - 11:24
L'utilisation des sockets est une solution, mais Google préconise l'utilisation du FileProvider pour Android 11 :






--
https://github.com/reuniware
https://stackoverflow.com/users/10922639/kotlinisland
Membre enregistré
164 messages
Popularité : +10 (10 votes)
Posté le 12 novembre 2020 - 11:26
Autant pour moi, c'est FileProvider ou ContentProvider/ContentResolver.

--
https://github.com/reuniware
https://stackoverflow.com/users/10922639/kotlinisland
Membre enregistré
201 messages
Popularité : +6 (10 votes)
Posté le 12 novembre 2020 - 13:06
tout à fait ! ça semble la solution à privilegier pour Android 11
dommage que windev mobile ne s'en serve pas encore aujourd'hui, ça oblige a re ecrire pas mal de choses en java ;-(

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