有人知道如何获取设备的序列号吗?
我知道我可以在NativeScript-5应用程序(TypeScript)中做到这一点:
import { Page } from "tns-core-modules/ui/page";
import * as platformModule from "tns-core-modules/platform";
export function onNavigatingTo(args: EventData) {
let page = <Page>args.object;
console.log("Manufacturer:" + platformModule.device.manufacturer);
console.log("Model:" + platformModule.device.model);
console.log("UUID:" + platformModule.device.uuid);
}
但是我找不到设备序列号的任何属性。 有人有主意吗?没关系,如果您的解决方案仅适用于Android(因为我的项目仅针对Android平板电脑)。
谢谢!
更新:
Manoj向我指出了一些可能解决了我问题的Java代码。但是,我无法将以下代码编组到TypeScript。
public static String getManufacturerSerialNumber() {
String serial = null;
try {
Class<?> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class, String.class);
serial = (String) get.invoke(c, "ril.serialnumber", "unknown");
} catch (Exception ignored) {}
return serial;
}
也许有人可以帮助我吗?太棒了!
答案 0 :(得分:3)
iOS绝不允许应用访问任何机密信息,这些信息也适用于序列号。在Android上,您可以使用
读取序列号android.os.Build.SERIAL
我已经用Playground进行了测试
编辑1:
像三星这样的制造商似乎具有与android.os.Build.SERIAL不同的序列号。 Here is another SO thread似乎与三星非常相关,示例代码是用Java编写的。
编辑2:
这是在三星设备上获取序列号的方法
let serialNumber = '';
try {
const cl = application.android.context.getClassLoader();
const SystemProperties = cl.loadClass('android.os.SystemProperties');
const paramTypes = (<any>Array).create(java.lang.Class, 2);
paramTypes[0] = java.lang.String.class;
paramTypes[1] = java.lang.String.class;
const getMethod = SystemProperties.getMethod('get', paramTypes);
const params = (<any>Array).create(java.lang.Object, 2);
params[0] = new java.lang.String('ril.serialnumber');
params[1] = new java.lang.String('unknown');
serialNumber = getMethod.invoke(SystemProperties, params);
} catch (err) {
console.error(err);
}
答案 1 :(得分:0)
您可以检查属性'ro.serialno','ril.serialnumber','gsm.sn1','sys.serialnumber'
在我的情况下,Samsung TAB S2具有2个序列号。属性“ ro.serialno”比“ ril.serialnumber”更准确。所以我先检查一下。
getSerial() {
if (isAndroid) {
let serialNumber = null;
try {
const cl = application.android.context.getClassLoader();
const SystemProperties = cl.loadClass('android.os.SystemProperties');
const paramTypes = (<any>Array).create(java.lang.Class, 2);
paramTypes[0] = java.lang.String.class;
paramTypes[1] = java.lang.String.class;
const getMethod = SystemProperties.getMethod('get', paramTypes);
const params = (<any>Array).create(java.lang.Object, 2);
// Reorder if needed
const props = ['ro.serialno', 'ril.serialnumber', 'gsm.sn1', 'sys.serialnumber'];
for(let i = 0, len = props.length; i < len; i++) {
params[0] = new java.lang.String(props[i]);
serialNumber = getMethod.invoke(SystemProperties, params);
if (serialNumber !== '') {
return serialNumber;
}
}
} catch (err) {
console.error(err);
}
return serialNumber;
}
}
完整代码:https://play.nativescript.org/?template=play-tsc&id=ViNo6g&v=6