44 votes

Confusion de l'identifiant de l'appareil android

Si je compose # # 8 2 5 5 # # , je reçois mon identifiant de périphérique Android qui commence par android-35c2acdd...

sourcesource

Si j'utilise Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID) le résultat commence par a96b4b27...

Si j'utilise ((TelephonyManager) Context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId() le résultat commence par 3538330...

Quelle est la différence entre ces identifiants? Comment obtenir le résultat de la

# # 8 2 5 5 # # composition du numéro?

82voto

Andrew Alcock Points 10536

IMEI

L'IMEI est le 'MAC' du module de téléphonie - l'identifiant unique que le téléphone utilise lorsqu'il se connecte via GSM/GPRS/HSPDA/etc. Le réseau GSM l'utilise pour router les appels et les données du téléphone sur le réseau GSM jusqu'à la passerelle vers Internet (qui est un réseau IP).

Un module de téléphonie est une puce ou une carte de circuit qui gère le réseau téléphonique, soit GSM ou CMDA, et a souvent un emplacement pour une carte SIM amovible. Certains téléphones ont plus d'un module de téléphonie (téléphones actifs double-SIM ou multi-SIM). Chaque module de téléphonie a son propre IMEI.

Les fabricants attribuent à chaque téléphone (strictement au module de téléphonie) un IMEI unique lors de la fabrication. Cependant, le numéro peut normalement être réécrit si vous avez le bon logiciel. Cela est souvent fait après qu'un téléphone a été volé pour donner au téléphone une nouvelle identité et contourner le système de blocage des téléphones volés.

L'IMEI peut être obtenu de manière programmable en utilisant l'API [TelephonyManager.getDeviceId()](http://developer.android.com/reference/android/telephony/TelephonyManager.html#getDeviceId()).

Les téléphones CDMA ont un ESN ou MEID qui sont de longueurs et formats différents, même s'il est récupéré en utilisant la même API.

Les appareils Android sans modules de téléphonie - par exemple de nombreuses tablettes et appareils TV - n'ont pas d'IMEI. Comme l'a commenté Schlangi, certains appareils qui n'ont pas de module de téléphonie imitent l'IMEI, donc la présence d'un IMEI ne garantit pas (toujours) que l'appareil a un module de téléphonie.

ANDROID_ID

L'ANDROID_ID est un autre numéro unique sur le téléphone - il est automatiquement généré par le système d'exploitation lors de son démarrage pour la première fois (faire de cette manière simplifie beaucoup la tâche des fabricants en supprimant une étape de la chaîne de production).

L'ANDROID_ID peut (et le fait) changer, par exemple :

Il est principalement utilisé par les développeurs (par ex pour identifier et se connecter à des appareils en utilisant adb)

ANDROID_ID peut être utilisé pour identifier un appareil Android compte tenu des avertissements ci-dessus, ce qui signifie de façon réaliste qu'il identifie de manière unique l'appareil sur de grandes périodes de sa durée de vie, mais il ne peut pas être fiable à 100%.

Remarquez également qu'il y avait un bug dans Froyo où de nombreux appareils se donnaient le même ANDROID_ID. Voici le bug

Autres identifiants

Il existe un certain nombre d'autres choses qui peuvent être utilisées pour identifier l'appareil :

Autres notes

Vous avez besoin de permissions spécifiques pour accéder à chaque API, donc si vous essayez d'accéder à toutes, les permissions de votre application dans le Google Play Store semblent assez permissives.

Je pense que ce lien explique toutes les autres options disponibles également https://android-developers.googleblog.com/2011/03/identifying-app-installations.html

8voto

MarvinLabs Points 13401

Found on the web:

private static final Uri URI = Uri.parse("content://com.google.android.gsf.gservices");
private static final String ID_KEY = "android_id";

String getAndroidId(Context ctx) {
    String[] params = { ID_KEY };
    Cursor c = ctx.getContentResolver()
            .query(URI, null, null, params, null);

    if (!c.moveToFirst() || c.getColumnCount() < 2)
        return null;

    try {
        return Long.toHexString(Long.parseLong(c.getString(1)));
    } catch (NumberFormatException e) {
        return null;
    }
}

Ajouter la permission :

Cependant, je doute que ce soit un ID documenté et je serais prudent car cela pourrait ne pas fonctionner si GTalk est mis à jour.

Source: http://blog.codepainters.com/2012/01/17/how-to-obtain-gtalk-android-id/

Il vaut également la peine de jeter un coup d'œil à : http://www.toxicbakery.com/android-development/getting-google-auth-sub-tokens-in-your-android-applications/

5voto

neeraj t Points 1309

Il existe plusieurs façons d'obtenir un identifiant unique sur un téléphone Android.

  1. ID Android Il s'agit d'une chaîne hexadécimale de 64 bits générée au premier démarrage de l'appareil. En général, il ne changera pas sauf en cas de réinitialisation d'usine.

    Secure.getString(getContentResolver(), Secure.ANDROID_ID);

L'ID Android est considéré comme peu fiable car il peut parfois être nul. La documentation indique qu'il "peut changer lors d'une réinitialisation d'usine". Cette chaîne peut également être modifiée sur un téléphone rooté.

   String m_szAndroidID = Secure.getString(getContentResolver(), Secure.ANDROID_ID);

Renvoie : 9774d56d682e549c. Aucune autorisation spéciale requise.

2. La chaîne d'adresse MAC WLAN est un autre identifiant unique que vous pouvez utiliser en tant qu'identifiant de l'appareil. Avant de la lire, assurez-vous que votre projet a obtenu l'autorisation android.permission.ACCESS_WIFI_STATE, sinon l'adresse MAC WLAN sera nulle.

 WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
 String m_szWLANMAC = wm.getConnectionInfo().getMacAddress();
Renvoie : 00:11:22:33:44:55 (pas une vraie adresse car il s'agit d'une ROM personnalisée, comme vous pouvez le voir, l'adresse MAC peut facilement être falsifiée). Le WLAN n'a pas besoin d'être activé pour lire cette valeur.

3. La chaîne d'adresse MAC BT, disponible sur les appareils Android avec Bluetooth, peut être lue si votre projet a l'autorisation android.permission.BLUETOOTH.

    BluetoothAdapter m_BluetoothAdapter = null; // Adaptateur Bluetooth local
    m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
   String m_szBTMAC = m_BluetoothAdapter.getAddress();

Renvoie : 43:25:78:50:93:38. Le BT n'a pas besoin d'être activé pour être lu. 4. IMEI uniquement pour les appareils Android avec utilisation du téléphone :

 TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
 String szImei = TelephonyMgr.getDeviceId(); // Nécessite la permission READ_PHONE_STATE

Cela nécessite d'ajouter une autorisation dans AndroidManifest.xml, et les utilisateurs seront notifiés lors de l'installation de votre logiciel : android.permission.READ_PHONE_STATE. L'IMEI est unique pour votre téléphone et ressemble à ceci : 359881030314356 (sauf si vous avez un appareil de pré-production avec un IMEI invalide comme 0000000000000). Pour plus d'informations, consultez ce lien.

3voto

IMEI

Il est obligatoire, selon les organismes de normalisation, que les dispositifs mobiles pour les réseaux publics puissent être identifiés de manière unique par le numéro IMEI

Il incombe au fabricant de définir l'IMEI. En pratique, les développeurs voient parfois des IMEI comme 000000... ou 123456... Parfois, des téléphones avec des IMEI identiques sont mis en production, ce qui est bien sûr un bug qui devrait être corrigé...

ANDROID_ID

Un nombre de 64 bits (sous forme de chaîne hexadécimale) qui est généré de manière aléatoire au premier démarrage de l'appareil et qui doit rester constant pour la durée de vie de l'appareil. (La valeur peut changer si une réinitialisation aux valeurs d'usine est effectuée sur l'appareil)

Il semble qu'Android ne fasse pas confiance aux fabricants et fournisse un identifiant unique alternatif.

EDIT:

Ce que j'obtiens (au lieu de l'IMEI) sur un appareil Android qui n'est pas un téléphone:

$ adb shell dumpsys iphonesubinfo
Phone Subscriber Info:
  Phone Type = GSM
  Device ID = null

1voto

pragmatic Points 90

Je pense que toutes les informations fournies ci-dessus sont suffisantes pour comprendre les codes.

Cependant, je pense que vous n'êtes toujours pas capable de voir le résultat du ##8255## composer" (excusez-moi si j'ai mal compris quelque chose)

Je suppose que la raison derrière cela est l'une des dernières corrections de bug contre le code USSD effectuée dans Android. (vous pouvez en savoir plus à ce sujet et vérifier si votre appareil est sur la liste. c'est partout sur le web)

Enfin, si vous voulez juste obtenir l'identifiant Android tout de suite, je vous suggère d'utiliser cette application-

https://play.google.com/store/apps/details?id=com.redphx.deviceid&hl=fr

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X