dezorientacja ID urządzenia z Androidem

If I dial * # * # 8 2 5 5 # * # * , Dostaję identyfikator urządzenia z Androidem, który zaczyna się od android-35c2acdd...

Źródło

Jeśli użyję Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID) wynik zaczyna się od a96b4b27...

Jeśli użyję ((TelephonyManager) Context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId() wynik zaczyna się od 3538330...

Jaka jest różnica między tymi ID-ami? Jak Mogę uzyskać wynik

* # * # 8 2 5 5 # * # * wybieranie numeru?

Author: Charles, 2012-12-06

5 answers

IMEI

IMEI to ' MAC ' dla modułu telefonicznego - unikalny identyfikator, którego Telefon używa, gdy łączy się przez GSM/GPRS/HSPDA/etc. Sieć GSM wykorzystuje go do kierowania połączeń i danych z telefonu przez sieć GSM aż do bramy do Internetu (która jest siecią IP). Moduł telefoniczny to układ lub płytka drukowana, która obsługuje sieć telefoniczną, GSM lub CMDA, i często posiada gniazdo na wymienną kartę SIM. Niektóre telefony posiadają więcej niż jeden moduł telefoniczny (aktywne telefony dwu - lub multi-SIM). Każdy moduł telefoniczny posiada własny IMEI. [[1]}producenci dają każdemu telefonowi (ściśle modułowi telefonii) unikalny IMEI podczas produkcji. Jednak numer można normalnie przepisać, jeśli masz odpowiednie oprogramowanie. Często robi się to po kradzieży telefonu, aby nadać telefonowi nową tożsamość i system blokowania skradzionego telefonu bipass.

IMEI można programowo uzyskać za pomocą TelephonyManager.getDeviceId () API.

Telefony CDMA mają ESN lub MEID, które mają różne długości i formaty, mimo że są pobierane przy użyciu tego samego API.

Urządzenia z systemem Android bez modułów telefonicznych - na przykład wiele tabletów i urządzeń telewizyjnych - nie mają IMEI. Jak skomentował Schlangi, niektóre urządzenia, które nie mają modułu telefonicznego fałszywe IMEI, więc obecność IMEI nie gwarantuje (zawsze) urządzenie posiada moduł telefoniczny.

ANDROID_ID

ANDROID_ID to kolejny unikalny numer telefonu-jest on automatycznie generowany przez system operacyjny, który uruchamia się po raz pierwszy (robienie tego w ten sposób znacznie ułatwia producentom usunięcie kroku z linii produkcyjnej).

ANDROID_ID może (i nie) się zmieniać, na przykład:

Jest używany głównie przez programistów (np. identyfikowanie i łączenie się z urządzeniami za pomocą adb)

ANDROID_ID może być użyty do identyfikacji urządzenia z Androidem, biorąc pod uwagę powyższe zastrzeżenia, co realnie oznacza, że jednoznacznie identyfikuje urządzenie przez znaczną część życia urządzenia, ale nie można na nim polegać.

Zauważ również, że w Froyo był błąd, w którym wiele urządzeń dało sobie ten sam ANDROID_ID. To jest błąd

Inne identyfikatory

Istnieje wiele innych rzeczy, które można wykorzystać do identyfikacji urządzenia:

  • adres MAC modułu WiFi: WifiManager.getConnectionInfo() -> WifiInfo.getMacAddress () . Często można to zmienić w oprogramowaniu, ale Ogólnie jest stała przez cały okres użytkowania urządzenia. Można go również odczytać tylko wtedy, gdy moduł WiFi jest włączony.
  • MAC adres modułu BlueTooth: BluetoothAdaptor.getAddress () . Podobnie jak WiFi MAC, może to być często zmieniane w oprogramowaniu i może być wyłączone, gdy tego potrzebujesz]} Numer telefonu abonenta. Może to ulec zmianie, jeśli użytkownik zażąda nowego numeru od operatora telekomunikacyjnego lub zmieni numer karty SIM. Jest on uzyskiwany z TelephonyManager.getLine1Number () . Jest to dostępne tylko dla urządzeń z Androidem z zainstalowaną aktualną kartą SIM i płatną usługą z telco.
  • The SIM zawiera własny numer identyfikacyjny (IMSI ). Można to uzyskać z Menedżera TelephonyManager.getSubscriberId () API. Oczywiście karta SIM może nie być obecna w określonym czasie i zmienia się, gdy karta SIM zostanie zmieniona - a użytkownicy mogą uaktualnić / wymienić kartę SIM, zachowując ten sam numer, więc nie można powiedzieć, że jest to jeden do jednego do konkretnego telefonu lub użytkownika.
  • powiązany z IMSI jest MSISDN . Funkcja ta służy do identyfikacji abonamentu (Umowa o konkretny numer telefonu z operatorem telefonii komórkowej) i w związku z tym nadaje urządzeniu jego numer telefonu. MSISDN może być powiązany z kilkoma kartami SIM, a zatem z kilkoma telefonami. Zawiera wszystkie zastrzeżenia do czytania SIM powyżej. Można to pobrać za pomocą TelephonyManager.getSimSerialNumber () . Dzięki Schlangi za poprawki i uzupełnienia
  • Gingerbread i Później ma Androida.os.Buduj.SERIAL który wielu producenci ustawili (ale nie wszyscy. Bugger).

Inne uwagi

Potrzebujesz konkretnych uprawnień, aby uzyskać dostęp do każdego API, więc jeśli spróbujesz dla nich wszystkich, uprawnienia Twojej aplikacji w Sklepie Google Play wyglądają dość permisywnie.

Myślę, że ten link wyjaśnia wszystkie inne dostępne opcje również https://android-developers.googleblog.com/2011/03/identifying-app-installations.html

 82
Author: Andrew Alcock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:47:11

Znalezione w sieci:

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

Dodaj uprawnienie:

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

Jednak wątpię, aby był to udokumentowany identyfikator i byłbym ostrożny, ponieważ może to nie działać, jeśli Gtalk zostanie zaktualizowany.

Źródło: http://blog.codepainters.com/2012/01/17/how-to-obtain-gtalk-android-id/

Warto też przyjrzeć się: http://www.toxicbakery.com/android-development/getting-google-auth-sub-tokens-in-your-android-applications/

 8
Author: Vincent Mimoun-Prat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-11 18:42:48

Istnieje pewne podejście do uzyskania unikalnego identyfikatora na telefonie z Androidem.

  1. Android ID Jest to 64-bitowy ciąg szesnastkowy, który jest generowany podczas pierwszego rozruchu urządzenia. Zasadniczo nie zmieni się, chyba że jest zresetowany fabrycznie.

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

Android ID, uważany za niewiarygodny, ponieważ czasami może być null. Dokumentacja stwierdza ,że "może się zmienić po przywróceniu ustawień fabrycznych". Ten ciąg może być również zmieniony na zrootowanym telefonie.

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

Returns: 9774d56d682e549c . No special permissions required.

2. Ciąg adresu MAC WLAN to kolejny unikalny identyfikator, którego można użyć jako identyfikatora urządzenia. Zanim go przeczytasz, musisz upewnić się, że twój projekt ma Androida.pozwolenie.ACCESS_WIFI_STATE uprawnienia lub adres MAC WLAN pojawi się jako null.

 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. Ciąg adresu MAC BT, dostępny na urządzeniach z Androidem z Bluetooth, można odczytać, jeśli projekt ma system android.pozwolenie.Zezwolenie BLUETOOTH.

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

Zwraca: 43:25:78:50:93:38 . BT nie musi być włączony, aby go przeczytać. 4. IMEI tylko dla urządzeń z systemem Android z użyciem telefonu:

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

To wymaga dodania uprawnień w AndroidManifest.xml, a użytkownicy zostaną powiadomieni po zainstalowaniu Twoje oprogramowanie: android.pozwolenie.READ_PHONE_STATE. IMEI jest wyjątkowy dla Twojego telefonu i wygląda to tak: 359881030314356 (chyba że masz urządzenie przedprodukcyjne z nieprawidłowym IMEI jak 0000000000000). Aby uzyskać więcej informacji Zobacz ten link.

 5
Author: neeraj t,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-18 09:23:57

IMEI

organy normalizacyjne wymagają, aby urządzenia mobilne dla sieci publicznych mogły być jednoznacznie identyfikowane za pomocą numeru IMEI

Za ustawienie IMEI odpowiada producent. W praktyce Programiści czasami widzą IMEIs jak 000000... / align = "left" / 123456.. Czasami telefony z identycznym IMEI trafiają do produkcji, co oczywiście jest błędem, który powinien zostać naprawiony...

ANDROID_ID

64-bitowy numer (jako szesnastkowy string), który jest losowo generowany podczas pierwszego rozruchu urządzenia i powinien pozostać stały przez cały okres użytkowania urządzenia. (Wartość może ulec zmianie, jeśli na urządzeniu zostanie wykonane Resetowanie fabryczne.)

Wygląda na to, że Android nie ufa producentom i zapewnia alternatywny unikalny identyfikator.

EDIT:

Oto co dostaję (zamiast IMEI) na urządzeniu z Androidem czylia nie telefon:

$ adb shell dumpsys iphonesubinfo
Phone Subscriber Info:
  Phone Type = GSM
  Device ID = null
 3
Author: 18446744073709551615,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-01-15 07:19:46

Myślę, że wszystkie informacje podane powyżej są wystarczająco dobre, aby zrozumieć kody.

Jednak myślę, że nadal "nie jesteś w stanie zobaczyć wyniku ##8255## dial" (plz przepraszam, jeśli pomyliłem się gdzieś w zrozumieniu tego)

Zakładam, że powodem tego jest jedna z najnowszych poprawek błędów przeciwko kodowi USSD zrobionemu w Androidzie. (możesz przeczytać więcej na ten temat i sprawdzić, czy Twoje urządzenie znajduje się na liście. its all over the web)

Wreszcie, jeśli chcesz Pobierz android ID od razu proponuję użyć tej aplikacji -

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

 1
Author: pragmatic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-17 16:38:39