A partir d'Android 10 pour récupérer l'identifiant de l'appareil il faut "l'autorisation de privilège READ_PRIVILEGED_PHONE_STATE". Malheureusement cette autorisation de privilège ne peut pas être accordée aux applications tierces (non système).

 

https://developer.android.com/about/versions/10/privacy/changes#non-resettable-device-ids

 

Les fonctions SysIMEI et SysNumSérie ne retourne donc plus de valeur sous Android 10.

 

Il existe malgré tout deux solutions.

 

La première est de créer une application de type "device owner", cela peut être fait dans une application Android WINDEV Mobile à partir de la version 25 en cochant une option dans la description de la configuration du projet. Mais attention, il ne peut y avoir qu'une seule application "device owner" sur un périphérique Android, et une application "device owner" ne peut pas être désinstallée sauf à faire une ré-initialisation complète de l'appareil.

 

La seconde possibilité est de créer dans un dossier de l'appareil un fichier contenant un GUID qui permettra d'identifier l'appareil. Ici le risque est qu'en cas de suppression du fichier, l'appareil sera considéré comme un nouvel appareil.

 

Voici un exemple de code :

 

PROCÉDURE IdentifiantAppareil()


sIdentifiant est une chaîne

sFichierIdentifiant est une chaîne

 

//récupère IMEI appareil

sIdentifiant=SysIMEI("")


//IMEI récupéré ?

SI sIdentifiant~="" ALORS


//pas de IMEI : c'est le cas si il n'y a pas de carte SIM, et le IMEI plus récupérable à partir d'Android 10

//Construction d'un nom de fichier dans un dossier "public" (non spécifique à l'application) qui contient/va contenir // un identifiant unique

sFichierIdentifiant =SysRepStockageExterne(1,ssePublic)+[fSep]+"systemeid.bin"


//le fichier existe ?

SI PAS fFichierExiste(sFichierIdentifiant) ALORS

//non, on génère un identifiant unique (un GUID)

fSauveBuffer(sFichierIdentifiant,DonneGUID(guidBrut))

FIN


//Lecture de l'identifiant

sIdentifiant=fChargeBuffer(sFichierIdentifiant)

FIN

 

 

< Retour

3 commentaires

François SCHAAL
29/07/2020 - 08:08 - Répondre
Cet article, très intéressant, n'indique pas si SysIdentifiant() retourne une valeur sous Android 10.

LOIC HAMEL
29/07/2020 - 08:32 - Répondre
Bonjour, SysIdentifiant ne permet pas d’identifier un appareil mais une application sur un appareil. Sa valeur dépend de la signature d’application.

DAVID LAPORAL
29/07/2020 - 14:30 - Répondre
Bonjour, à propose SysIdentifiant, la valeur retournée dépend de la signature de l'application, mais cette signature est-elle amenée à changer? En cas de changement de version de l'app par exemple, suite à une MAJ de Windev Mobile, ou autre?

Publier un commentaire : 
Votre adresse email ne sera pas publiée


© 2020 PC SOFT. Tous droits réservés. Réalisé  avec WEBDEV