Nativescript 如何获得设备';国标的序列号?
有人知道如何获取设备的序列号吗 我知道我可以在NativeScript-5应用程序(TypeScript)中执行此操作:Nativescript 如何获得设备';国标的序列号?,nativescript,Nativescript,有人知道如何获取设备的序列号吗 我知道我可以在NativeScript-5应用程序(TypeScript)中执行此操作: 从“tns核心模块/ui/Page”导入{Page}; 从“tns核心模块/平台”导入*作为平台模块; 导出函数onNavigatingTo(参数:EventData){ 让page=args.object; console.log(“制造商:“+platformModule.device.Manufacturer”); 日志(“模型:“+platformModule.dev
从“tns核心模块/ui/Page”导入{Page};
从“tns核心模块/平台”导入*作为平台模块;
导出函数onNavigatingTo(参数:EventData){
让page=args.object;
console.log(“制造商:“+platformModule.device.Manufacturer”);
日志(“模型:“+platformModule.device.Model”);
日志(“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;
}
公共静态字符串getManufacturerSerialNumber(){
字符串serial=null;
试一试{
Class c=Class.forName(“android.os.SystemProperties”);
方法get=c.getMethod(“get”,String.class,String.class);
serial=(String)get.invoke(c,“ril.serialnumber”,“unknown”);
}捕获(忽略异常){}
返回序列号;
}
也许有人能帮我?那太棒了 iOS从不允许应用程序访问任何机密信息,这同样适用于序列号。使用Android,您可以使用
android.os.Build.SERIAL
我做了测试
编辑1:
像三星这样的制造商似乎有一个不同的序列号,这与其他制造商的序列号不同。这似乎与三星非常相关,示例代码是用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);
}
让serialNumber='';
试一试{
const cl=application.android.context.getClassLoader();
const SystemProperties=cl.loadClass('android.os.SystemProperties');
const paramTypes=(iOS从不允许应用程序访问任何机密信息,这也适用于序列号。使用Android,您可以使用
android.os.Build.SERIAL
我做了测试
编辑1:
像三星这样的制造商似乎有一个不同的序列号,与之不同。这似乎与三星非常相关,示例代码是用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);
}
让serialNumber='';
试一试{
const cl=application.android.context.getClassLoader();
const SystemProperties=cl.loadClass('android.os.SystemProperties');
const paramTypes=(您可以检查属性“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;
}
}
getSerial(){
if(isAndroid){
设serialNumber=null;
试一试{
const cl=application.android.context.getClassLoader();
const SystemProperties=cl.loadClass('android.os.SystemProperties');
const paramTypes=(您可以检查属性“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;
}
}
getSerial(){
if(isAndroid){
设serialNumber=null;
试一试{
const cl=application.android.context.getClassLoader();
const SystemProperties=cl.loadClass('android.os.SystemProperties');
const paramTypes=(你指的是IMEI号码吗?不是,不是IMEI。我指的是设备的真实序列号。在我的平板电脑设置中,我找到了“型号”和“序列号”.这是我要找的序列号。你指的是IMEI号吗?不,不是IMEI。我指的是设备的真实序列号。在我的平板电脑设置中,我找到了“型号”和“序列号”。这是我要找的序列号。你好,Manoj,令人惊讶的是,一台设备有这么多ID。在我的三星Galaxy平板电脑上,你的代码返回“330050c2712865fb”,这实际上是我执行“tns运行”时NativeScript的CLI显示的ID。不过,这仍然不是我要找的序列号。在我的平板电脑上,当我进入“设置>关于平板电脑”我可以看到“序列号:R52K90L6TZH“。这也是打印在盒子上的数字和设备上的标签。这也是三星Knox用于MDM的数字。奇怪的是,这么多数字……三星/MI品牌确实为他们的设备定制了Android。根据Android官方文档,这是我们应该使用的API,它在我的Moto G5+上工作,这是一个真实的API。”(未触及)谷歌的Android。如果我在三星上找到任何东西,我会继续看一看。非常感谢你,Manoj。我也会继续研究……如果你找到一个适合三星的解决方案,足以满足我的目的。我已经更新了答案,并链接到其他so线程,该线程有多个针对SamsUngul的解决方案,但它是用Java编写的。我希望你可以abl我想把它写进JS/TS。不确定。周末会看一看;)谢谢你,Manoj。你好,Manoj,一台设备有这么多ID。在我的三星Galaxy平板电脑上,你的代码返回“330050c2712865fb”,这实际上是我运行“tns”时NativeScript的CLI显示的ID。除此之外,这仍然不是我要找的序列号。在我的平板电脑上,当我进入“设置>关于平板电脑”时,我会看到一个“序列号:R52K90L6TZH”。这也是打印在盒子上的数字和设备上的贴纸。这也是三星Knox用于MDM的数字。奇怪的是,这么多数字……三星/米品牌确实如此