Java Android获取序列号
我正在尝试以编程方式获取设备序列号。我使用了以下行:Java Android获取序列号,java,android,Java,Android,我正在尝试以编程方式获取设备序列号。我使用了以下行: Build.SERIAL 返回类似于: 95b9efad04ad28 但是,当我转到设备上的设置时,我可以看到它显示不同的字符串: 有人能给我指出正确的方向吗?这不是你的答案: TelephonyManager tManager = (TelephonyManager)myActivity.getSystemService(Context.TELEPHONY_SERVICE); String uid = tManager.getDevic
Build.SERIAL
返回类似于:
95b9efad04ad28
但是,当我转到设备上的设置时,我可以看到它显示不同的字符串:
有人能给我指出正确的方向吗?这不是你的答案:
TelephonyManager tManager = (TelephonyManager)myActivity.getSystemService(Context.TELEPHONY_SERVICE);
String uid = tManager.getDeviceId();
我在一个房间里找到的
我正在尝试以编程方式获取设备序列号
这项功能在Android上已经被破坏很久了。有些设备返回null
,有些设备返回所有设备的相同ID等。如果您的应用程序使用的是Google Play服务,请改用,或查看此信息,但现在已过时,但仍然有效。这对我来说很有效:
String serialNumber;
try {
Class<?> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class, String.class);
serialNumber = (String) get.invoke(c, "sys.serialnumber", "error");
if (serialNumber.equals("error")) {
serialNumber = (String) get.invoke(c, "ril.serialnumber", "error");
}
} catch (Exception e) {
e.printStackTrace();
}
字符串序列号;
试一试{
Class c=Class.forName(“android.os.SystemProperties”);
方法get=c.getMethod(“get”,String.class,String.class);
serialNumber=(字符串)get.invoke(c,“sys.serialNumber”,“error”);
if(serialNumber.equals(“error”)){
serialNumber=(String)get.invoke(c,“ril.serialNumber”,“error”);
}
}捕获(例外e){
e、 printStackTrace();
}
由于Android ID在许多设备上被破坏,并且Android构建类似,因此我使用的是Android ID和设备WIFI-MAC地址的混合,每个设备都是唯一的。
两者都用于创建UUID,无论Android ID是否为空,UUID总是唯一的
试着做一些类似的事情:
final WifiManager wm = (WifiManager) myAct.getSystemService(Context.WIFI_SERVICE);
String macAddr = null;
if (wm != null)
macAddr = wm.getConnectionInfo().getMacAddress();
String androidId = Secure.getString(myAct.getContentResolver(), Secure.ANDROID_ID);
if (androidId == null)
androidId = "0000000000000000";
if (macAddr == null || macAddr.contains("\\s+") || !macAddr.contains(":"))
macAddr = "00:00:00:00:00:00";
UUID deviceUuid = new UUID(macAddr.hashCode(), androidId.hashCode());
String deviceId = deviceUuid.toString();
根据设备制造商和Android版本的不同,有几种方法可以获得该数字:
public static String getSerialNumber() {
String serialNumber;
try {
Class<?> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class);
serialNumber = (String) get.invoke(c, "gsm.sn1");
if (serialNumber.equals(""))
serialNumber = (String) get.invoke(c, "ril.serialnumber");
if (serialNumber.equals(""))
serialNumber = (String) get.invoke(c, "ro.serialno");
if (serialNumber.equals(""))
serialNumber = (String) get.invoke(c, "sys.serialnumber");
if (serialNumber.equals(""))
serialNumber = Build.SERIAL;
// If none of the methods above worked
if (serialNumber.equals(""))
serialNumber = null;
} catch (Exception e) {
e.printStackTrace();
serialNumber = null;
}
return serialNumber;
}
公共静态字符串getSerialNumber(){
字符串序列号;
试一试{
Class c=Class.forName(“android.os.SystemProperties”);
方法get=c.getMethod(“get”,String.class);
serialNumber=(字符串)get.invoke(c,“gsm.sn1”);
if(serialNumber.equals(“”)
serialNumber=(String)get.invoke(c,“ril.serialNumber”);
if(serialNumber.equals(“”)
serialNumber=(String)get.invoke(c,“ro.serialno”);
if(serialNumber.equals(“”)
serialNumber=(String)get.invoke(c,“sys.serialNumber”);
if(serialNumber.equals(“”)
serialNumber=Build.SERIAL;
//如果上述方法均无效
if(serialNumber.equals(“”)
serialNumber=null;
}捕获(例外e){
e、 printStackTrace();
serialNumber=null;
}
返回序列号;
}
摘自。我知道这个问题已经问了好几年了,但我想发布一个更新版本,特别是对于那些可能正在使用Xamarin的人。这是一个针对C#Xamarin Android的解决方案,基于上面用户Failyyte发布的解决方案 代码如下:
public static string GetDeviceSerialCode ( )
{
string serial_number = string.Empty;
try
{
var c = Java.Lang.Class.ForName("android.os.SystemProperties");
var get = c.GetMethod("get", Java.Lang.Class.FromType(typeof(Java.Lang.String)));
serial_number = (string)get.Invoke(c, "gsm.sn1");
if (string.IsNullOrEmpty(serial_number))
{
serial_number = (string)get.Invoke(c, "ril.serialnumber");
}
if (string.IsNullOrEmpty(serial_number))
{
serial_number = (string)get.Invoke(c, "ro.serialno");
}
if (string.IsNullOrEmpty(serial_number))
{
serial_number = (string)get.Invoke(c, "sys.serialnumber");
}
if (string.IsNullOrEmpty(serial_number))
{
serial_number = Build.GetSerial();
}
}
catch (Exception e)
{
serial_number = string.Empty;
}
return serial_number;
}
可惜没有。我尝试了这个,但是它返回空值。这是一款平板电脑,因此不确定这是否会产生差异。我使用了运行在
4.4.2
上的Lenovo S660
,它返回了正确的值。您使用的是什么设备或版本?可能重复的不适用于Android 10,Android 10添加限制