PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → CaméraLanceAppli(viCaptureImage) ne fonctionne plus sous Android 14
CaméraLanceAppli(viCaptureImage) ne fonctionne plus sous Android 14
Débuté par EVonZ, 17 jan. 2025 09:31 - 6 réponses
Posté le 17 janvier 2025 - 09:31
Bonjour,

Depuis ma mise à jour Android 14, CaméraLanceAppli(viCaptureImage) ne fonctionne plus.
Le code ci-dessous ne sort plus de chemin...

sFileImage = CaméraLanceAppli(viCaptureImage)
SI sFileImage ~= "" ALORS
COL_General.FichierLog(ErreurInfo(errComplet))
FIN


dans ma LOG:

- Appel WL :
Fonction <>

- Niveau : erreur non fatale

- Pas de message d'erreur système

- Que s'est-il passé ?

J'ai essayé CaméraLanceAppli(viCaptureImage) sans resultat probant...
Posté le 17 janvier 2025 - 10:15
Je voulais dire:

J'ai essayé VidéoLanceAppli(viCaptureImage) ou PhotoLanceAppli(viCaptureImage) sans succès...
Posté le 17 janvier 2025 - 11:15
En fait sFileImage reste vide.

Le hemin complet du fichier dans lequel la photo a été enregistrée, n'est pas créé....

VidéoLanceAppli(viCaptureImage) a le même comportement...

Après plusieurs tests, aléatoirement, le chemin est créé, mais impossible de reprendre une photo...

Les permission Camera sont toutes intégrées au projet
Posté le 17 janvier 2025 - 14:48
J'ai testé dans un projet simple, avec un seul bouton:
Clic sur BTN-Photos
PrisePhoto()

PROCEDURE INTERNE PrisePhoto() <thread>
sFileImage est une chaîne = ""
err est une chaîne = ""
sFileImage = CaméraLanceAppli(viCaptureImage)
SI sFileImage ~= "" ALORS
err = "NOK::" + sFileImage
SINON
err = "OK::" + sFileImage
FIN
EditErr(err)
FIN

PROCEDURE INTERNE EditErr(err est une chaîne) <thread principal>
Info(err)
FIN


Test avec 10 clics:
1. sFileImage reste vide
2. OK
3.sFileImage reste vide
4.sFileImage reste vide
5.sFileImage reste vide
6.OK
7.OK
8.OK
9.sFileImage reste vide
10.OK

Cela est fonctionnel sur Android 11 ou 13.....
Posté le 20 janvier 2025 - 14:16
EVonZ a écrit :
> Bonjour,

Bonjour

Je vois votre problème, vous souhaitez activer la syntaxe CaméraLanceAppli, j'ai deux solutions pour vous, à vous de choisir

1. Soit vous devrez ajouter un syntaxe qui détecte l'erreur, ensuite vous aurez une information, dans votre cas, ce n'est pas très grave après la vue de l'erreur
2. Soit vous devrez programmer un autre solution mais de même fonctionnalité pour avoir une image

Dans le cas 1, voilà un programme dont vous pourrez utiliser
sFileImage is string = CaméraLanceAppli(viCaptureImage)
IF Erreurdetecte = True THEN
Info(Erreurinfo(Errcomplet))
Endprogramme()
END
SI sFileImage ~= "" ALORS
COL_General.FichierLog(ErreurInfo(errComplet))
FIN

Dans le cas 2, voilà un programme dont vous pourrez utiliser
// EDD (01/25) : créer un champ caméra et un champ bouton
// EDD (01/25) : créer cette programme dans l'évènement du bouton
LOCAL
cCaméra is ClCaméra_Photo
cCaméra:m_sChamp_Caméra = "CMR_Image"
cCaméra:Répertoire()
cCaméra:Validation()
IF cCaméra:m_bRetour = True THEN
cCaméra:Capture()
END

// EDD (01/25) : créer une nouvelle classe ClCaméra_Photo
ClCaméra_Photo est une Classe
m_bRetour is booléen
m_sRépertoire is string
m_sChamp_Caméra is string
FIN

// EDD (01/25) : créer deux nouvelle méthode dans la classe ClCaméra_Photo
PROCÉDURE Répertoire()
LOCAL
sString is string = fRepExe() + "\Photo" // EDD (01/25) : pour cette exemple le chemin se trouve dans le répertoire exe mais vous pourrez remplacer par un répertoire de l'Android
// sString is string = SysRepStockageExterne() + "\Photo"
IF fRépertoireExiste(sString) = False THEN
fRepCrée(sString)
END
:m_sRépertoire = sString

PROCÉDURE Capture()
LOCAL
dhDate_Heure is DateHeure = DateHeureSys()
sString is string = :m_sRépertoire+ "\IMG_" + Left(dhDate_Heure, 14) + ".jpeg"
IF CaméraCapture({:m_sChamp_Caméra, indChamp}, sString, viCaptureImage) = False THEN
Info(ErreurInfo(errComplet))
EndProgram()
ELSE
Info("Merci de visualiser la photo dans le répertoire " + RC + sString)
END

PROCÉDURE Validation()
:m_bRetour = True
IF NoSpace(:m_sChamp_Caméra) = "" THEN
:m_bRetour = False
Info("Merci de remplir le champ de caméra")
ELSE IF ChampExiste(:m_sChamp_Caméra) = False THEN
:m_bRetour = False
Info("Merci de vérifier le champ caméra inexistant " + RC + :m_sChamp_Caméra)
END

NB : Attention dans les deux cas, il faudrait que le chemin de sauvegarde existe

Cordialement
Mr.RATSIMANDRESY
Niry Aina Eddy
Posté le 20 janvier 2025 - 16:32
Bonjour,

Justement, le problème vient du fait que sFileImage = CaméraLanceAppli(viCaptureImage) ne retourne pas de chemin.

Et ce de façon aléatoire.

Si sFileImage existe le code est fonctionnel....
Posté le 20 janvier 2025 - 16:42
A partir de la version 27, cette fonction est obsolète pour les applications Android (CameraCapture)

Je suis sous la version 2024