首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用Nativescript获取设备的序列号?

如何用Nativescript获取设备的序列号?
EN

Stack Overflow用户
提问于 2018-12-21 17:30:43
回答 2查看 2.5K关注 0票数 0

有人知道如何获取设备的序列号吗?

我知道我可以在NativeScript-5应用程序(TypeScript)中这样做:

代码语言:javascript
复制
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。

代码语言:javascript
复制
      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;
      }

也许有人能帮我?那就太棒了!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-21 18:27:57

iOS从不允许应用程序访问任何机密信息,这也适用于序列号。使用Android,您可以使用

代码语言:javascript
复制
android.os.Build.SERIAL

我用游乐场做了测试

编辑1:

像三星这样的制造商似乎有着与android.os.Build.SERIAL不同的序列号。看起来与三星非常相关的这是另一个这样的线程,示例代码是用Java编写的。

编辑2:

以下是如何获取三星设备上的序列号

代码语言:javascript
复制
        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);
        }

更新游乐场

票数 4
EN

Stack Overflow用户

发布于 2019-10-14 07:30:58

您可以检查属性“ro.erialno”、“ril.erialnumber”、“gsm.sn1”、“sys.serialnumber”

Android:如何以编程方式访问AVD管理器中显示的设备序列号(API版本8)

在我的例子中,三星TAB S2有两个系列。属性'ro.serialno‘比’ril.erialnumber‘更准确。所以我先检查一下。

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53888745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档