Android设备是否有唯一的ID,如果有的话,使用Java访问它的简单方法是什么?
序列号是一种唯一的设备标识符,可通过android.os.Build.SERIAL获得。
public static String getSerial() {
String serial = "";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
serial = Build.getSerial();
}else{
serial = Build.SERIAL;
}
return serial;
}
在调用getSerial()之前,请确保您拥有READ_PHONE_STATE权限。
注意:它不适用于没有电话功能的设备(例如仅支持WiFi的平板电脑)。
Build.SERIAL
(或Build.getSerial()
)并非总是可用。更多信息请参阅Android O中设备标识符的更改博客文章。同样值得一读的是:唯一标识符的最佳实践。 - Ted HoppString SERIAL_NUMER = Build.SERIAL;
为了完整起见,这里是如何在Xamarin.Android
和C#中获取Id
的方法:
最初的回答:
var id = Settings.Secure.GetString(ContentResolver, Settings.Secure.AndroidId);
Activity
中:var id = Settings.Secure.GetString(context.ContentResolver, Settings.Secure.AndroidId);
当传入上下文时,context
代表传入的上下文。
这个例子展示了如何在Android中获取和存储设备ID,但我使用的是Kotlin语言。
val textView: TextView = findViewById(R.id.textView)
val uniqueId: String = Settings.Secure.getString(contentResolver, Settings.Secure.ANDROID_ID)
textView.text = "Device ID: $uniqueId"
生成设备标识符
private String generateDeviceIdentifier() {
String uniqueDevicePseudoID = "35" +
Build.BOARD.length() % 10 +
Build.BRAND.length() % 10 +
Build.DEVICE.length() % 10 +
Build.DISPLAY.length() % 10 +
Build.HOST.length() % 10 +
Build.ID.length() % 10 +
Build.MANUFACTURER.length() % 10 +
Build.MODEL.length() % 10 +
Build.PRODUCT.length() % 10 +
Build.TAGS.length() % 10 +
Build.TYPE.length() % 10 +
Build.USER.length() % 10;
String serial = Build.getRadioVersion();
String uuid = new UUID(uniqueDevicePseudoID.hashCode(), serial.hashCode()).toString();
Log.e("DeviceIdentifier ", "\nDeviceIdentifier uuid is : " + uuid);
return uuid;
}
输出
DeviceIdentifier uuid is : 00000000-36ab-9c3c-0000-0000714a4f37
Build.SERIAL
。请注意,此功能仅在API级别9中添加,并且可能不适用于所有设备。要在早期平台上获取唯一ID,您需要读取类似MAC地址或IMEI的内容。只需获取设备ID一次,然后将其存储在数据库或文件中。在这种情况下,如果是应用程序的第一次启动,则生成一个ID并将其存储。下一次,它只会取出存储在文件中的ID。
经过大量的搜索,我意识到没有一个确定的方法可以获得唯一的ID。
假设我们希望每个用户只能在一个手机上使用该应用程序。
我的做法是:
当用户在我的应用程序中注册时,我将当前时间作为唯一的ID保存在服务器和应用程序数据库中。
当用户尝试在另一台手机上登录时,我从服务器获取用户信息并意识到该用户已经登录,因为唯一ID字段已满,因此向他/她显示对话框,询问他/她是否要离开之前的会话,如果他说是,我将为他创建一个新的唯一ID并更新服务器上的唯一ID详细信息。
在我的应用程序中,每次运行时我都从服务器获取用户配置文件。 如果服务器上存储的唯一ID与应用程序数据库中存储的唯一ID不同,则会自动注销用户。
android.telephony.TelephonyManager.getDeviceId()
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
检查 SystemInfo.deviceUniqueIdentifier
Documentation: http://docs.unity3d.com/Documentation/ScriptReference/SystemInfo-deviceUniqueIdentifier.html
设备的唯一标识符。它对于每个设备都是唯一的(只读)。
iOS:在iOS7之前的设备上,它将返回MAC地址的哈希值。在iOS7及以上设备上,它将是UIDevice identifierForVendor或如果由于任何原因失败,则为ASIdentifierManager advertisingIdentifier。
ANDROID_ID
,请务必阅读这个答案和这个漏洞。 - Dheeraj Vepakomma