43

をダイヤル * # * # 8 2 5 5 # * # * すると、で始まる Android デバイス ID が取得されますandroid-35c2acdd...

ソース ソース

Settings.Secure.getString(getContentResolver(), Settings.Secure.ANDROID_ID)結果を使用すると、a96b4b27...

((TelephonyManager) Context.getSystemService(Context.TELEPHONY_SERVICE)).getDeviceId()結果を使用すると、3538330...

これらの ID の違いは何ですか? の結果を取得するにはどうすればよいですか

* # * # 8 2 5 5 # * # * ダイヤル?

4

5 に答える 5

82

IMEI

IMEI はテレフォニー モジュールの「 MAC 」であり、電話が GSM/GPRS/HSPDA/etc 経由で接続するときに使用する一意の ID です。GSM ネットワークはこれを使用して、GSM ネットワークを介して電話からの通話とデータをゲートウェイからインターネット (IP ネットワーク) にルーティングします。

テレフォニー モジュールは、電話ネットワーク (GSM または CMDA) を処理するチップまたは回路基板であり、多くの場合、取り外し可能な SIM カード用のスロットがあります。一部の電話機には、複数のテレフォニー モジュール (アクティブなデュアルまたはマルチ SIM 電話機) があります。各テレフォニー モジュールには独自の IMEI があります。

メーカーは、製造時に各電話機 (厳密にはテレフォニー モジュール) に固有の IMEI を付与します。ただし、適切なソフトウェアがあれば、通常は番号を書き換えることができます。これは、電話が盗まれた後に行われることが多く、電話に新しい ID を与え、盗まれた電話ブロック システムをバイパスします。

IMEI は、TelephonyManager.getDeviceId() API を使用してプログラムで取得できます。

CDMA 携帯電話の ESN または MEIDは、同じ API を使用して取得されますが、長さと形式が異なります。

テレフォニー モジュールのない Android デバイス (多くのタブレットや TV デバイスなど)には IMEI がありませんSchlangiがコメントしたように、テレフォニー モジュールを持たない一部のデバイスは IMEI を偽装しているため、IMEI が存在しても、デバイスにテレフォニー モジュールがあることを (常に) 保証するわけではありません。

ANDROID_ID

ANDROID_ID は電話のもう 1 つの一意の番号です。これは、OS が初めて起動するときに OS によって自動的に生成されます (このようにすることで、生産ラインからステップを取り除くことで、製造業者にとってはるかに簡単になります)。

ANDROID_ID は変更される可能性があります (実際に変更されます)。次に例を示します。

これは主に開発者によって使用されます (例: を使用してデバイスを識別して接続するadb) 。

ANDROID_ID は、上記の警告を考慮して Android デバイスを識別するために使用できます。現実的には、デバイスの有効期間の大部分にわたってデバイスを一意に識別することを意味しますが、信頼することはできません。

また、Froyo にはバグがあり、多くのデバイスが同じANDROID_ID を与えていたことにも注意してください。これがバグです

その他の識別子

デバイスを識別するために使用できる他の多くのものがあります。

  • WiFi モジュールの MAC アドレス: WifiManager.getConnectionInfo() -> WifiInfo.getMacAddress()。多くの場合、これはソフトウェアで変更できますが、通常はデバイスの寿命を通じて一定です。また、WiFi モジュールがオンになっている場合にのみ読み取ることができます。
  • BlueTooth モジュールの MAC アドレス: BluetoothAdaptor.getAddress()。WiFi MAC と同様に、これは多くの場合ソフトウェアで変更でき、必要なときにオフにすることができます。
  • 加入者の電話番号。これは、ユーザーが電話会社に新しい番号を要求した場合、またはユーザーが SIM を切り替えた場合に変更される可能性があります。TelephonyManager.getLine1Number()から取得されます。これは、現在の SIM がインストールされていて、電話会社の有料サービスを利用している Android スマートフォン デバイスにのみ存在します。
  • SIM には独自の識別番号 ( IMSI ) が含まれています。これはTelephonyManager.getSubscriberId() API から取得されます。明らかに、SIM は特定の時点で存在しない可能性があり、SIM が変更されると変更されます。ユーザーは同じ番号を維持しながら SIM をアップグレード/交換できます。したがって、これが 1 対 1 であるとは言えません。特定の電話またはユーザー。
  • IMSI に関連するのはMSISDNです。これは、サブスクリプション(携帯電話会社との特定の電話番号の契約) の識別として機能し、デバイスに電話番号を与えます。MSISDN は、複数の SIM カード、つまり複数の電話に関連付けられている場合があります。上記のSIMを読むためのすべての警告が付属しています. これはTelephonyManager.getSimSerialNumber()で取得できます。訂正と追加をしてくれたSchlangiに感謝します
  • Gingerbread 以降には、多くのメーカーが設定するandroid.os.Build.SERIALがあります (ただし、すべてではありません。Bugger)。

その他の注意事項

すべての API にアクセスするには特定のアクセス許可が必要です。そのため、すべての API にアクセスしようとすると、Google Play ストアでのアプリのアクセス許可はかなり寛大に見えます。

このリンクは、他の利用可能なすべてのオプションについても説明していると思いますhttps://android-developers.googleblog.com/2011/03/identifying-app-installations.html

于 2012-12-12T00:59:07.590 に答える
8

ウェブ上で見つけた:

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

権限を追加:

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

ただし、それが文書化された ID であるとは思えません。GTalk が更新された場合に機能しない可能性があるため、注意が必要です。

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

また、一見の価値があります: http://www.toxicbakery.com/android-development/getting-google-auth-sub-tokens-in-your-android-applications/

于 2012-12-11T11:59:23.167 に答える
5

Android携帯で一意の識別子を取得するためのいくつかのアプローチがあります。

  1. Android IDこれは、デバイスの最初の起動時に生成される64ビットの16進文字列です。通常、工場出荷時にリセットされない限り変更されません。

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

Android IDは、nullになることがあるため、信頼できないと見なされます。ドキュメントには、「工場出荷時のリセット時に変更される可能性がある」と記載されています。この文字列は、ルート化された電話でも変更できます。

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

Returns: 9774d56d682e549c . No special permissions required.

2. WLAN MACアドレス文字列は、デバイスIDとして使用できるもう1つの一意の識別子です。読む前に、プロジェクトにandroid.permission.ACCESS_WIFI_STATE権限があることを確認する必要があります。そうしないと、WLANMACアドレスが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.プロジェクトにandroid.permission.BLUETOOTH権限がある場合、Bluetoothを搭載したAndroidデバイスで使用可能なBTMACアドレス文字列を読み取ることができます。

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

戻り値:43:25:78:50:93:38。BTを読むために、オンにする必要はありません。4.電話を使用するAndroidデバイスのみのIMEI:

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

これには、AndroidManifest.xmlに権限を追加する必要があり、ソフトウェアのインストール時にユーザーに通知されます:android.permission.READ_PHONE_STATE。IMEIはお使いの携帯電話に固有のものであり、次のようになります:359881030314356(0000000000000などの無効なIMEIを備えた試作デバイスを使用している場合を除く)。詳細については、このリンクを参照してください。

于 2012-12-18T09:06:39.440 に答える
3

IMEI

公衆ネットワーク用のモバイル デバイスは IMEI 番号で一意に識別できるという、標準化団体による必須の要件があります。

IMEI の設定はメーカーの責任です。実際には、開発者は 000000... や 123456... のような IMEI を目にすることがあります...同じ IMEI を持つ電話が本番環境に移行することがありますが、これはもちろん修正が必要なバグです...

ANDROID_ID

デバイスの初回起動時にランダムに生成される 64 ビットの数値 (16 進文字列として) であり、デバイスの存続期間中は一定のままである必要があります。(デバイスで工場出荷時設定へのリセットが実行されると、値が変更される場合があります。)

Android はメーカーを信頼しておらず、別の一意の ID を提供しているようです。

編集:

これは私が(IMEIの代わりに)電話ではないAndroidデバイスで取得するものです:

$ adb shell dumpsys iphonesubinfo
Phone Subscriber Info:
  Phone Type = GSM
  Device ID = null
于 2012-12-07T06:19:39.357 に答える
1

上記のすべての情報は、コードを理解するのに十分だと思います。

それでも、あなたはまだ「#8255# #ダイヤルの結果を見ることができない」と思います(これを理解するのにどこか間違っていたらすみません)

この背後にある理由は、Android で作成された USSD コードに対する最新のバグ修正の 1 つだと思います。(これについて詳しく読んで、デバイスがリストにあるかどうかを確認してください。ウェブ全体にあります)

最後に、Android ID をすぐに取得したい場合は、このアプリを使用することをお勧めします-

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

于 2012-12-17T16:38:39.390 に答える