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 retournent 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
|