Domanda confusione di id dispositivo Android


Se compongo il numero * # * # 8 2 5 5 # * # * , Ottengo il mio id del dispositivo Android che inizia con android-35c2acdd...

source  fonte

Se io uso Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID) il risultato inizia con a96b4b27...

Se io uso ((TelephonyManager) Context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId() il risultato inizia con 3538330...

Qual è la differenza tra questi ID? Come posso ottenere il risultato di

* # * # 8 2 5 5 # * # *  comporre?


39
2017-12-06 13:23


origine


risposte:


IMEI

L'IMEI è il 'MAC'per il modulo di telefonia - l'ID univoco che il telefono utilizza quando si collega tramite GSM / GPRS / HSPDA / ecc. La rete GSM lo utilizza per instradare le chiamate e i dati dal telefono attraverso la rete GSM fino al gateway in Internet (che è una rete IP).

Un modulo di telefonia è un chip o circuito stampato che gestisce la rete telefonica, GSM o CMDA, e spesso ha uno slot per una scheda SIM rimovibile. Alcuni telefoni hanno più di un modulo di telefonia (telefoni attivi dual o multi-SIM). Ogni modulo di telefonia ha il proprio IMEI.

I produttori danno ad ogni telefono (rigorosamente il modulo di telefonia) un IMEI unico durante la produzione. Tuttavia, il numero può essere normalmente riscritto se si ha il software giusto. Questo è spesso fatto dopo che un telefono è stato rubato per dare al telefono una nuova identità e bipassare il sistema di blocco del telefono rubato.

L'IMEI può essere programmaticamente ottenuto utilizzando il TelephonyManager.getDeviceId () API.

I telefoni CDMA hanno un ESN o MEID quali sono diverse lunghezze e formati, anche se viene recuperato utilizzando la stessa API.

Dispositivi Android senza moduli di telefonia - ad esempio molti tablet e dispositivi TV - non ho un IMEI. Come Schlangi ha commentato, alcuni dispositivi che non dispongono di un modulo di telefonia falso l'IMEI, quindi la presenza di un IMEI non garantisce (sempre) che il dispositivo abbia un modulo di telefonia.

ANDROID_ID

ANDROID_ID è un altro numero univoco sul telefono: viene generato automaticamente dal sistema operativo all'avvio per la prima volta (in questo modo lo fa tanto più facile per i produttori rimuovendo un gradino dalla linea di produzione).

ANDROID_ID può (e lo fa) cambiare, ad esempio:

Viene utilizzato principalmente dagli sviluppatori (ad esempio, l'identificazione e la connessione ai dispositivi che utilizzano adb)

ANDROID_ID può essere utilizzato per identificare un dispositivo Android in base alle avvertenze precedenti, il che significa realisticamente che identifica in modo univoco il dispositivo su parti significative della durata del dispositivo, ma non può essere considerato affidabile.

Si noti inoltre che c'era un bug in Froyo in cui molti dispositivi si davano il stesso ANDROID_ID. Questo è il insetto

Altri identificatori

Ci sono un certo numero di altre cose che possono essere utilizzate per identificare il dispositivo:

  • Indirizzo MAC del modulo WiFi: WifiManager.getConnectionInfo ()-> WifiInfo.getMacAddress (). Questo può spesso essere cambiato nel software, ma generalmente è costante per tutta la durata del dispositivo. Inoltre può essere letto solo se il modulo WiFi è acceso.
  • Indirizzo MAC del modulo BlueTooth: BluetoothAdaptor.getAddress (). Come il WiFi MAC, questo può essere cambiato spesso nel software e potrebbe essere spento quando ne hai bisogno
  • Numero di telefono dell'abbonato. Questo può cambiare se l'utente richiede un nuovo numero dalla telco, o se l'utente cambia SIM. È ottenuto da TelephonyManager.getLine1Number (). Questo è presente solo per i dispositivi Android con una SIM installata e un servizio a pagamento con una telco.
  • La SIM contiene il proprio numero identificativo (IMSI). Questo è ottenuto dal TelephonyManager.getSubscriberId () API. Ovviamente la SIM potrebbe non essere presente in un momento specifico, e cambia quando viene cambiata la SIM - e gli utenti possono aggiornare / sostituire la propria SIM mantenendo lo stesso numero, quindi non si può dire che questo sia uno a uno per un telefono o utente specifico.
  • Relativo all'IMSI è il MSISDN. Funziona come l'identificazione di a sottoscrizione (il tuo contratto per un numero di telefono specifico con il tuo gestore di telefonia mobile) e quindi fornisce al dispositivo il suo numero di telefono. MSISDN può essere associato a diverse SIM card e quindi a più telefoni. Viene fornito con tutte le avvertenze per la lettura della SIM sopra. Questo può essere recuperato con TelephonyManager.getSimSerialNumber (). Grazie Schlangi per le correzioni e le aggiunte
  • Pan di zenzero e più tardi ha android.os.Build.SERIAL che molti produttori hanno impostato (ma non tutti) Bugger).

Altre note

Hai bisogno di autorizzazioni specifiche per accedere a ciascuna API, quindi se provi per tutte, le autorizzazioni della tua app nel Google Play Store sembrano abbastanza permissive.

Penso che questo link spieghi anche tutte le altre opzioni disponibili https://android-developers.googleblog.com/2011/03/identifying-app-installations.html


75
2017-12-12 00:59



Trovato sul 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;
    }
}

Aggiungi permesso:

<uses-permission android:name="com.google.android.providers.gsf.permission.READ_GSERVICES"/>

Tuttavia, dubito che sia un ID documentato e farei attenzione perché potrebbe non funzionare se GTalk viene aggiornato.

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

Vale anche la pena dare un'occhiata a: http://www.toxicbakery.com/android-development/getting-google-auth-sub-tokens-in-your-android-applications/


8
2017-12-11 11:59



Ci sono alcuni approccio per ottenere un identificatore univoco su telefono Android.

  1. ID Android È una stringa esadecimale a 64 bit che viene generata nel primo avvio del dispositivo. Generalmente non verrà modificato a meno che non venga ripristinato il ripristino delle impostazioni di fabbrica.

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

L'ID Android, considerato inaffidabile perché a volte può essere nullo. La documentazione afferma che "può cambiare al reset di fabbrica". Questa stringa può anche essere modificata su un telefono rooted.

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

Returns: 9774d56d682e549c . No special permissions required.

2. La stringa Indirizzo MAC WLAN, è un altro identificatore univoco che è possibile utilizzare come ID dispositivo.  Prima di leggerlo, dovrai assicurarti che il tuo progetto abbia android.permission.ACCESS_WIFI_STATE  autorizzazione o l'indirizzo MAC WLAN verrà visualizzato come nullo.

 WifiManager wm = (WifiManager)getSystemService(Context.WIFI_SERVICE);
 String m_szWLANMAC = wm.getConnectionInfo().getMacAddress();
Returns: 00:11:22:33:44:55 (not a real address since this is a custom ROM , as you can see the MAC address can easily be faked).
WLAN doesn't have to be on, to read this value.

3. La stringa Indirizzo MAC di BT, disponibile sui dispositivi Android con Bluetooth, può essere letta se il progetto ha il permesso android.permission.BLUETOOTH.

    BluetoothAdapter m_BluetoothAdapter = null; // Local Bluetooth adapter
    m_BluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
   String m_szBTMAC = m_BluetoothAdapter.getAddress();

Restituisce: 43: 25: 78: 50: 93: 38. BT non deve essere acceso, per leggerlo. 4. IMEI solo per dispositivi Android con uso del telefono:

 TelephonyManager TelephonyMgr = (TelephonyManager)getSystemService(TELEPHONY_SERVICE);
 String szImei = TelephonyMgr.getDeviceId(); // Requires READ_PHONE_STATE

Ciò richiede l'aggiunta di un'autorizzazione in AndroidManifest.xml e gli utenti verranno avvisati al momento dell'installazione  il tuo software: android.permission.READ_PHONE_STATE. L'IMEI è unico per il tuo telefono  e ha il seguente aspetto: 359881030314356 (a meno che non si disponga di un dispositivo di preproduzione con IMEI non valido come 0000000000000). Per maggiori informazioni fare riferimento questo link.


4
2017-12-18 09:06



IMEI

Esiste un requisito obbligatorio da parte degli organismi di standardizzazione, che i dispositivi mobili per le reti pubbliche possano essere identificati in modo univoco dal numero IMEI

È responsabilità del produttore impostare IMEI. In pratica, gli sviluppatori a volte vedono IMEI come 000000 ... o 123456 ... A volte i telefoni con IMEI identico vanno in produzione, che ovviamente è un bug che dovrebbero essere risolto ...

ANDROID_ID

Un numero a 64 bit (come una stringa esadecimale) generato casualmente sul primo avvio del dispositivo e che dovrebbe rimanere costante per tutta la durata del dispositivo. (Il valore può cambiare se viene eseguito un reset di fabbrica sul dispositivo.)

Sembra che Android non si fidi dei produttori e fornisca un ID univoco alternativo.

MODIFICARE:

Questo è ciò che ottengo (invece di IMEI) su e dispositivo Android che è non un telefono:

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

3
2017-12-07 06:19



Penso che tutte le informazioni fornite sopra siano sufficienti per comprendere i codici.

Eppure penso che tu sia ancora "incapace di vedere il risultato del ## 8255 ## comporre "(scusa se vi sono andato male da qualche parte nel capire questo)

Presumo che la ragione di questo sia una delle ultime correzioni di bug contro il codice USSD fatto in Android. (puoi leggere di più su questo e controllare se il tuo dispositivo è sulla lista. è tutto sul web)

Infine, se vuoi semplicemente ottenere l'ID Android subito ti suggerisco di usare questa app-

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


1
2017-12-17 16:38