我想为适用于手机和平板电脑的 android 设备使用唯一 ID。(IMEI 不适用于没有 SIM 卡设备,有时 MAC 地址返回 null)
我不确定 android.os.Build.SERIAL 是否唯一。
有人知道吗?
感谢和问候。
是的,但请注意,它仅在 API 级别 9 中添加,并且可能不会出现在所有设备上。要在早期平台上获得唯一 ID,您需要读取 MAC 地址或 IMEI 等信息。
通常,尝试阅读所有可能的 ID,并使用可用的 ID。请参阅这篇文章以获得指导。
您可以使用 Build serial 和 android ID 来制作您自己的唯一 ID。
String serial = Build.SERIAL;
String android_id =Secure.getString(context.getContentResolver(),
Secure.ANDROID_ID);
String myKey=serial +android_id ;
序列号仅在 API:9 中公开。但是您可以使用反射在旧版本中获得它。但是文档提到“如果可用”,所以我想不要依赖它。
String deviceSerial = (String) Build.class.getField("SERIAL").get(
null);
我认为对于唯一 ID,您应该使用 android ID。以下是获取 Android Id 的代码。
String android_id = Secure.getString(this.getContentResolver(),
Secure.ANDROID_ID);
Log.d("Android","Android ID : "+android_id);
如果它在那里,那么它应该是独一无二的。但不能保证已设置此属性。它也是 API 9。不幸的是,没有简单的方法来唯一地识别设备。像所说的SERIAL这样的一些属性可以存在,像ANDROID_ID这样的其他属性不是唯一的,像MAC这样的其他一些属性取决于WIFI的存在或其状态(如果wifi模块关闭,您可能无法读取它的MAC)。即使设备有电话模块,也无法读取 IMEI 等一些设备。所以最好的方法是收集尽可能多的数据,并尝试构建一些你最有可能考虑唯一设备 ID 的东西
MAC、IMEI 和 SERIAL 的组合呢?
您只需要处理它们都可能不存在的事实。在没有 SIM 卡的旧手机上。
我只是觉得 MAC 会返回 null 很奇怪。恕我直言,这应该是不可能的,因为移动设备没有 MAC 是没有意义的。
可能有 2 个 MAC 地址,但在某些情况下它们可能无法访问。