PC SOFT

PROFESSIONAL NEWSGROUPS
WINDEVWEBDEV and WINDEV Mobile

Home → WINDEV Mobile 2024 → Android numéro de série
Android numéro de série
Started by soundofthunder, Nov., 20 2017 11:12 AM - 12 replies
Registered member
10 messages
Posted on November, 20 2017 - 11:12 AM
Bonjour à tous les développeurs,
Je voudrais extraire le numéro de série hardware d'un appareil Android.
L'OS est Android 6.0 Marshmallow.
J'ai trouvé la librairie java suivante:
String getSerial ()
J'ai créé une procédure dans mon Windev 22 comme suit:

import android.content.*;
import android.os.Build;
public static String recup_android()
{
String androidid;
String SerialNumber;

androidid=android.os.Build.MODEL;
SerialNumber=android.os.Build.getserial;
return SerialNumber;

}

La compilation me génère une erreur comme suit:

Ligne de commande : "C:\Program Files\Java\jdk1.8.0_40\bin\java.exe" "-Dorg.gradle.appname=C:\Mes Projets Mobile\TEST\Android\Generation" -classpath "C:\WINDEV Mobile 22\Personnel\Android\Gradle\lib\gradle-launcher-2.14.1.jar" org.gradle.launcher.GradleMain assembleDebug -b "C:\Mes Projets Mobile\TEST\Android\Generation\build.gradle"


Erreur retournée :

:compileDebugJavaWithJavac - is not incremental (e.g. outputs have changed, no previous execution, etc.).
C:\Mes Projets Mobile\TEST\Android\Generation\src\com\atrium_id\wdgen\GWDCPProceduresGlobales.java:70: error: class, interface, or enum expected
}
^
1 error
:compileDebugJavaWithJavac FAILED


Par contre si je fais return androidid; et que j'enlève le numéro de série c'est OK.

Quelqu'un a une idée s'il vous plaît??

Merci

EB
Registered member
10 messages
Posted on November, 20 2017 - 11:23 AM
Pardon: L'erreur précédente était due aux accolades...
Mais J'ai l'erreur cannot find symbol !!!
Merci pour votre aide.

Echec de la création de l'application Android <C:\Mes Projets Mobile\TEST\Exe\TEST.apk>.


Ligne de commande : "C:\Program Files\Java\jdk1.8.0_40\bin\java.exe" "-Dorg.gradle.appname=C:\Mes Projets Mobile\TEST\Android\Generation" -classpath "C:\WINDEV Mobile 22\Personnel\Android\Gradle\lib\gradle-launcher-2.14.1.jar" org.gradle.launcher.GradleMain assembleDebug -b "C:\Mes Projets Mobile\TEST\Android\Generation\build.gradle"


Erreur retournée :

:compileDebugJavaWithJavac - is not incremental (e.g. outputs have changed, no previous execution, etc.).
C:\Mes Projets Mobile\TEST\Android\Generation\src\com\test_id\wdgen\GWDCPProceduresGlobales.java:40: error: cannot find symbol
SerialNumber=android.os.Build.getserial;
^
symbol: variable getserial
location: class Build
1 error
:compileDebugJavaWithJavac FAILED
Message modified, November, 20 2017 - 11:26 AM
Registered member
32 messages
Popularité : +10 (10 votes)
Posted on November, 20 2017 - 11:34 AM
Bonjour,

Pour moi la bonne syntaxe serait:

SerialNumber=android.os.Build.getserial();

Bon dév

--
Laurent P
Registered member
10 messages
Posted on November, 20 2017 - 11:52 AM
Merci beaucoup pour ton attention Laurent mais non!
J'ai de nouveau:
java:40: error: cannot find symbol
SerialNumber=android.os.Build.getserial();
Quelqu'un d'autres a une idée? JE me demande si ce n'est pas lié à la déclaration static ? JE devrais peut être déclarer une class?
Registered member
2,572 messages
Popularité : +222 (260 votes)
Posted on November, 20 2017 - 12:16 PM
Bonjour,

C'est SerialNumber=android.os.Build.getSerial(); avec un "S" majuscule. Java est sensible à la casse

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Registered member
10 messages
Posted on November, 20 2017 - 12:29 PM
Merci Philippe.
Mais je n'ai décidément pas de chance :-(

java:32: error: cannot find symbol
SerialNumber=android.os.Build.getSerial();
^
symbol: method getSerial()
location: class Build
1 error
:compileDebugJavaWithJavac FAILED
Registered member
2,572 messages
Popularité : +222 (260 votes)
Posted on November, 20 2017 - 2:03 PM
As tu testé ton code sous Android studio pour vérifier que ca fonctionne ?

--
Cordialement,

Philippe SAINT-BERTIN
Géode Informatique
Registered member
10 messages
Posted on November, 20 2017 - 2:04 PM
JE vous remercie pour vos contributions.
Mais en fait, Build.SERIAL renvoie le numéro de série de l'appareil dans mon cas.
JE pensais qu'avec un Marshmallow ou nougat, ce serait plus le cas, mais en fait si ça fonctionne :-)
Merci encore et bonne semaine à vous.
EB
Registered member
946 messages
Popularité : +102 (110 votes)
Posted on November, 20 2017 - 4:17 PM
Bonjour,
Essayez ceci (fonctionne sur Samsung Note 3 API-21)
//--------------------------------------------------------------------------------
// see : https://developer.android.com/reference/android/os/Build.html#getSerial()
// Renvois une chaine avec des informations sur la machine
//--------------------------------------------------------------------------------
import android.os.Build;
import android.os.Build.VERSION;
import android.provider.Settings.Secure;
import android.content.pm.*;
import android.content.Context;
import android.provider.Settings;
import java.lang.reflect.Field;


public static String getInfosDevice()
{
String InfosDevice = "";
String android_id = "";
String osName = "";

Context myContext = getContexteApplication();
android_id = Secure.getString(myContext.getContentResolver(), Secure.ANDROID_ID);

Field[] fields = Build.VERSION_CODES.class.getFields();
osName = fields[Build.VERSION.SDK_INT + 1].getName();

InfosDevice  = Build.MANUFACTURER + "\t"; // samsung  (ro.product.manufacturer)
InfosDevice += Build.MODEL + "\t"; //  SM-N9005 (ro.product.model)
InfosDevice += Build.SERIAL + "\t"; // "d4364aba"   (ro.serialno)
InfosDevice += Build.VERSION.SDK_INT + "\t"; // 21 -> API-Level  (ro.build.version.sdk)
InfosDevice += Build.VERSION.RELEASE + "\t"; // 5.0 (ro.build.version.release)
InfosDevice += Build.DISPLAY + "\t"; // LRX21V.N9005XXSGBPL6 (ro.build.display.id)
InfosDevice += Build.ID + "\t"; // LRX21V (ro.build.id)
InfosDevice += android_id + "\t"; // 546259d7609efccc  (net.hostname) 
InfosDevice += osName; // LOLLIPOP
//
return InfosDevice;
}
Registered member
946 messages
Popularité : +102 (110 votes)
Posted on November, 20 2017 - 4:20 PM
ou cette méthode
import java.lang.Object;

public static String getSerialNumber()
{
String serial_no = null;
try {
Class c = Class.forName("android.os.SystemProperties");
serial_no = (String) c.getMethod("get", String.class).invoke(c, "ril.serialnumber");
// ro.serialno --> "d4364aba" identique à Build.SERIAL
//                                                                                                              sys.serialnumber  --> ""
// ril.serialnumber --> "R38F10MWL9K" bingo !
} catch (Exception e) {
System.out.println("Some error occured : " + e.getMessage());
}
return serial_no;
}
Registered member
946 messages
Popularité : +102 (110 votes)
Posted on November, 20 2017 - 4:22 PM
3ème et dernière méthode :
//-----------------------------------------------------------------------------
// Renvois la valeur d'une  propriété du terminal.
// Pour en avoir la liste exécuter sous cmd : adb shell getprop
//-----------------------------------------------------------------------------
// [dhcp.wlan0.gateway]: [192.168.1.1]
// [dhcp.wlan0.ipaddress]: [192.168.1.13]
// [dhcp.wlan0.leasetime]: [604800]
// [dhcp.wlan0.mask]: [255.255.255.0]
// [dhcp.wlan0.mtu]: []
// [dhcp.wlan0.pid]: [6020]
// [dhcp.wlan0.reason]: [BOUND]
// [dhcp.wlan0.result]: [ok]
// [dhcp.wlan0.roaming]: [0]
// [dhcp.wlan0.server]: [192.168.1.1]
// ......................................
// Ex : getSytemProperty("ril.serialnumber") -> numéro de série du terminal
//-----------------------------------------------------------------------------
import java.lang.Process;
import java.lang.Runtime;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import android.util.Log;

public static String getSystemProperty(String propName)
{
String TAG = "PhPa";
String line;
BufferedReader input = null;

try {
Process p = Runtime.getRuntime().exec("getprop " + propName);
input = new BufferedReader(new InputStreamReader(p.getInputStream()), 1024);
line = input.readLine();
input.close();
}
catch (IOException ex) {
Log.e(TAG, "Lecture de la propriété : " + propName + ", impossible", ex);
return null;
}
finally {
if (input != null) {
try {
input.close();
}
catch (IOException e) {
Log.e(TAG, "Erreur getSystemProperty", e);
}
}
}

return line;
}
Posted on May, 09 2019 - 10:56 AM
Merci Philippe :merci:

La première procédure fonctionne très bien pour moi (Sur un Honeywell EDA51)
La deuxième ne renvoyait rien
et je n'ai pas essayé la troisième.

Jamais aucune alerte à la compilation.
(Je suis en Windev Mobile 21)

Je ne pense pas être le seul à avoir utilisé tes procédures et je déplore d'être le premier à te remercier.
Les usages se perdent... ;)
Registered member
7 messages
Posted on July, 26 2022 - 9:59 AM
Merci Philippe 👌
En 2022 Vous aidez la communauté par votre intervention.
Mille merci !
🙏🏼🙏🏼🙏🏼🙏🏼