Android管理API -一些Android设备不提供serialNumber



我正在与Android管理API获取设备serialNumber。

一些设备,如三星A30,三星Active Tab 3等提供设备序列号。但红米Pro 10和三星sm - g781b等设备不提供设备序列号。

我已将此提供给管理应用程序策略.

{
"installType": "REQUIRED_FOR_SETUP",
"permissionGrants": {
"policy": "GRANT",
"permission": "android.permission.PACKAGE_USAGE_STATS"
},
"autoUpdateMode": "AUTO_UPDATE_HIGH_PRIORITY",
"defaultPermissionPolicy": "GRANT",
"packageName": "com.example.management",
"delegatedScopes": [
"CERT_INSTALL"
]
}

我已经提供了这个AndroidManifest.xml

<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission
android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"
tools:ignore="ProtectedPermissions" />
<uses-permission
android:name="android.permission.READ_PHONE_STATE"
tools:remove="android:maxSdkVersion"/>

下面是代码,

fun getDeviceSerial(applicationContext: Context): String {
var serialNumber: String = ""
try {
val c = Class.forName("android.os.SystemProperties")
val get = c.getMethod("get", String::class.java)
serialNumber = get.invoke(c, "gsm.sn1") as String
when (serialNumber) {
"" -> serialNumber = get.invoke(c, "ril.serialnumber") as String
}
when (serialNumber) {
"" -> serialNumber = get.invoke(c, "ro.serialno") as String
}
when (serialNumber) {
"" -> serialNumber = get.invoke(c, "sys.serialnumber") as String
}
@Suppress("DEPRECATION")
when (serialNumber) {
"" -> serialNumber = Build.SERIAL
}
when (serialNumber) {
"" -> serialNumber = ""
}
} catch (e: Exception) {
e.printStackTrace()
Toast.makeText(applicationContext, e.message, Toast.LENGTH_LONG).show()
serialNumber = ""
}
if (serialNumber == "unknown") {
try {
val c = Class.forName("android.os.SystemProperties")
val get = c.getMethod(
"get",
String::class.java,
String::class.java
)
serialNumber = get.invoke(c, "ril.serialnumber", "unknown") as String
} catch (ignored: Exception) {
Toast.makeText(
applicationContext,
"ignored ${ignored.message}",
Toast.LENGTH_LONG
)
.show()
}
}
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O && serialNumber == "unknown") {
if (ActivityCompat.checkSelfPermission(
applicationContext,
Manifest.permission.READ_PHONE_STATE
) == PackageManager.PERMISSION_GRANTED
) {
serialNumber = Build.getSerial()
} 

} 
} catch (e: Exception) {
serialNumber = ""
}

return serialNumber
}
fun openTelePhony(context: Context?) {
context?.let {
var a = ""
try {
//check permission
if (ContextCompat.checkSelfPermission(
context,
Manifest.permission.CALL_PHONE
) == PackageManager.PERMISSION_GRANTED
) {
a = getDeviceSerial(context)

} else {
a = Build.SERIAL

}
System.out.print(a)
} catch (e: Exception) {
System.out.print()
}
}
}

我尝试了上面的代码从android管理api获取设备序列号。

您可以通过调用ADB shell getprop并读取任何唯一值来添加多个设备。

你也可以找到一些变化,也许可以帮助你找到设备串行或唯一值。

when (serialNumber) {
"" -> serialNumber = get.invoke(c, "ril.serialnumber") as String
}
when (serialNumber) {
"" -> serialNumber = get.invoke(c, "ro.serialno") as String
}
when (serialNumber) {
"" -> serialNumber = get.invoke(c, "gsm.sn1") as String
}
when (serialNumber) {
"" -> serialNumber = get.invoke(c, "sys.serialnumber") as String
}
when (serialNumber) {
"" -> serialNumber = get.invoke(c, "ro.boot.serialno") as String
}
when (serialNumber) {
"" -> serialNumber = get.invoke(c, "ro.ril.oem.sno") as String
}
when (serialNumber) {
"" -> serialNumber = get.invoke(c, "ril.cdma.esn") as String
}
when (serialNumber) {
"" -> serialNumber = get.invoke(c, "vendor.gsm.serial") as String
}
when (serialNumber) {
"" -> serialNumber = get.invoke(c, "ro.boot.un") as String
}
when (serialNumber) {
"" -> serialNumber = get.invoke(c, "ro.boot.uniqueno") as String
}
when (serialNumber) {
"" -> serialNumber = get.invoke(c, "ro.ril.oem.wifimac") as String
}
when (serialNumber) {
"" -> serialNumber = get.invoke(c, "ro.ril.oem.btmac") as String
}

最新更新