如果我拨*#*#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-S之间的区别? 我怎样才能得到的结果
*#*#8 2 5 5#*#*拨号?
Answer 1:
IMEI
该IMEI是“ MAC ”为电话模块-当它通过GSM / GPRS / HSPDA /等连接,该电话使用的唯一ID。 GSM网络,它使用路由呼叫和数据从手机通过GSM网络说得最多的网关到互联网(这是一个IP网络)。
电话模块是一个芯片或电路板处理该电话网络,GSM或CMDA,和经常具有用于可移除的SIM卡的槽。 有些手机有一个以上的电话模块(有源双或多卡手机)。 每个电话模块都有自己的IMEI。
厂家给每部手机(严格的电话模块)生产过程中一个唯一的IMEI。 但是,如果你有合适的软件数量,通常可以改写。 之后的手机被盗给手机一个新的身份和bipass被盗的手机拦截系统这是经常做。
的IMEI可以使用通过编程得到TelephonyManager.getDeviceId() API。
CDMA电话具有一个ESN或MEID它们是不同的长度和格式 ,尽管它是使用相同的API检索。
没有电话模块的Android设备-例如,许多平板电脑和电视设备- 没有一个IMEI。 作为Schlangi评论,一些设备没有电话模块假的IMEI,以一个IMEI的存在不会(总是),保证了设备具有电话模块。
ANDROID_ID
该ANDROID_ID是手机上的另一个唯一的数字-这是由操作系统,因为它首次启动时间(做这种方式使得它更通过从生产线一步的厂商更容易)自动生成。
所述ANDROID_ID可以(并且不会)改变,例如:
- 恢复出厂设置(包括重新刷新OS时)
- 在软件:如https://play.google.com/store/apps/details?id=com.vcastroi.changeid
它主要用于由开发者(例如,识别和连接到使用装置adb
)
ANDROID_ID可以被用于识别给定上述警告Android装置,现实地意味着它唯一地标识在装置寿命的显著部分的装置中,但不能依靠。
还要注意,在Froyo的一个bug,其中许多设备给自己同样的 ANDROID_ID。 这是错误
其他标识符
有许多可用于识别设备的其他事情:
- WiFi模块的MAC地址: WifiManager.getConnectionInfo() - > WifiInfo.getMacAddress() 。 这可以经常在软件改变,但一般是在器件寿命恒定。 此外,如果WiFi模块接通它只能读取。
- 蓝牙模块的MAC地址: BluetoothAdaptor.getAddress() 。 像无线MAC,这通常可以通过软件改变,当你需要它可能会关闭
- 用户的电话号码。 如果用户从电信请求新的号码,或者如果用户切换的SIM这可能会改变。 它是从获得TelephonyManager.getLine1Number() 。 这是只存在于安装了当前的SIM卡,并用电信有偿服务的Android手机设备。
- SIM卡包含它自己的识别码( IMSI )。 这是从获得TelephonyManager.getSubscriberId() API。 显然,SIM可能不会出现在任何特定的时间,它改变时,SIM卡被改变 - 而且用户可以升级/更换他们的SIM卡,同时保持相同的号码,所以你不能说这是一个-to-one的一个特定的电话或用户。
- 相关的IMSI是MSISDN 。 这个功能用于订阅 (您与您的移动服务提供商特定的电话号码的合同),因此鉴定提供设备的电话号码。 该MSISDN可与部分SIM卡,因此一些手机相关联。 它配备了所有的告诫用于读取SIM以上。 这可以与被检索TelephonyManager.getSimSerialNumber() 。 感谢Schlangi的更正和补充
- 姜饼后来有android.os.Build.SERIAL很多厂家设置(但不是全部。开溜)。
其他注意事项
你需要特定的权限来访问每个API,因此,如果您尝试为所有的人,你的应用程序在谷歌Play商店的权限看起来相当宽容。
我认为这个链接解释了所有其他可用选项还https://android-developers.googleblog.com/2011/03/identifying-app-installations.html
Answer 2:
在网上找到了:
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/
Answer 3:
有一些办法让Android手机上唯一的标识符。
的Android ID是其在设备的第一引导所生成的64位的十六进制字符串。 一般也不会改变,除非是恢复出厂设置。
Secure.getString(getContentResolver(),Secure.ANDROID_ID);
Android的ID,认为不可靠的,因为它有时是空的。 该文件指出,它“可以在恢复出厂设置改变”。 这个字符串也可以有根的手机上改变。
String m_szAndroidID = Secure.getString(getContentResolver(), Secure.ANDROID_ID);
Returns: 9774d56d682e549c . No special permissions required.
2. WLAN MAC地址串,是另一个唯一的标识,可以作为一个设备ID使用。 在你读它,你需要确保你的项目有android.permission.ACCESS_WIFI_STATE许可或WLAN MAC地址上来了空。
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. BT MAC地址字符串,与蓝牙Android设备,可如果你的项目有android.permission.BLUETOOTH权限读取。
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(除非你有一个无效的IMEI像0000000000000预生产设备)。 欲了解更多信息请参考以下链接。
Answer 4:
IMEI
有由标准化机构的强制性要求,对于公共网络的移动设备可以通过IMEI号码被唯一标识
这是制造商的责任设置IMEI。 在实践中,开发人员有时会看到IMEI号,像000000 ...或... 123456有时具有相同IMEI的手机去生产,这当然是应该修正了一个错误...
ANDROID_ID
即在装置的第一次启动随机生成一个64位的数(如十六进制字符串)应保持该装置的生存期内保持不变。 (如果在设备上执行出厂复位的值可能会改变。)
它看起来像Android这样不信任的制造商和提供了另一种独特的ID。
编辑:
这是我得到和Android设备是不是电话(而不是IMEI):
$ adb shell dumpsys iphonesubinfo
Phone Subscriber Info:
Phone Type = GSM
Device ID = null
Answer 5:
我认为,以上所提供的所有信息是不够好理解的代码。
然而,我觉得你还是“没能看到## 8255 ##表盘的结果”(PLZ借口,如果我出了问题的地方在理解这一点)
我认为这背后的原因是针对Android中取得USSD代码最新的错误修复程序的一个。 (你可以阅读更多关于这一点,并检查您的设备是否在名单上。它的所有网站上)
最后,如果你只是想获取Android ID通俗易懂,我建议你使用这个APP-
https://play.google.com/store/apps/details?id=com.redphx.deviceid&hl=en
文章来源: android device id confusion