【问题标题】:How to obtain a Motorola (Symbol) Mobile Device Serial Number?如何获取摩托罗拉(符号)移动设备序列号?
【发布时间】:2011-06-02 00:05:47
【问题描述】:

如何获取摩托罗拉(Symbol)移动设备序列号?

我正在为带有“符号”库的摩托罗拉 ES400 编程。

似乎有办法获取各种扫描仪的序列号,但不是实际设备本身的序列号!

有人有什么想法吗?


TerminalInfo返回的“序列号”(设备上显示的)和“电子序列号”有什么区别?

【问题讨论】:

    标签: api windows-mobile mobile pocketpc


    【解决方案1】:

    我刚刚在 MC9090 设备上处理了这个问题,它也使用了符号库(不确定它们是否相同,但这值得一试)。我使用反射是因为我有来自不同制造商的设备并且希望运行相同的代码。您可以直接从属性访问此字段或使用反射:

    这里是属性的位置:

    Symbol.ResourceCoordination.Terminalinfo.ESN
    

    这是我使用反射的方法:

    try
            {                   
                    Assembly symbolApi = Assembly.LoadFrom("Symbol.ResourceCoordination.dll");      
    
                    Type terminalInfo = null;
    
                    foreach (Type t in symbolApi.GetTypes())
                    {
                        if (t.Name == "TerminalInfo")
                        {
                            terminalInfo = t;                       
                            break;
                        }
                    }
    
                    LogService.log(terminalInfo.Name);
    
                    if (terminalInfo != null)
                    {
                        object objTerminalInfo = Activator.CreateInstance(terminalInfo);
    
                        PropertyInfo esn = null;
                        foreach (PropertyInfo info in terminalInfo.GetProperties())
                        {                           
                            if (info.Name == "ESN")
                            {
                                esn = info;
                                break;
                            }
                        }
    
                        if (esn != null)
                        {
                            object objSn = esn.GetValue(objTerminalInfo, null);
                            sn = objSn.ToString();
                        }
                    }
                    else
                        LogService.log("TerminalInfo type not found in " + symbolApi.FullName);
    
            }
            catch (MissingFieldException e)
            {               
                LogService.log("MissingFieldException, not Symbol Unit: " + e.Message);
            }
            catch (Exception e)
            {
                LogService.log("Error in SymbolAPI: " + e.Message);
            }
    

    希望这会有所帮助!

    【讨论】:

    • 为什么所有的 for/each 循环?为什么不使用 GetType(string) 来获取 TerminalInfo 类型,并类似地使用 GetProperty(string) 来获取 ESN 属性?而且由于 ESN 可能永远不会改变,我建议缓存一旦获得的值,以防止多次这样做。
    • 我确实缓存了它,并且只有在我还没有它时才调用它。 for/each 循环是因为 GetType(string) 方法返回 null,我真的不能花太多时间来找出原因。
    【解决方案2】:

    太棒了,谢谢。 Symbol SDK 帮助在搜索时没有找到这个!

    刚用过:

    Symbol.ResourceCoordination.TerminalInfo  Version = new Symbol.ResourceCoordination.TerminalInfo();
    
            return Version.ESN;
    

    【讨论】:

      【解决方案3】:

      还发现了这个:

                  Symbol.ResourceCoordination.TerminalInfo  Version = new Symbol.ResourceCoordination.TerminalInfo();
      
              System.Text.StringBuilder MyUUID = new StringBuilder("0x") ;
      
              if (Version.UniqueUnitID != null)
              {
                  //this code is actually from the Motorola SDK guid 
                  foreach (byte b in Version.UniqueUnitID)
      
                      MyUUID.Append(b.ToString("X2"));
      
              }
      
              return MyUUID.ToString();
      

      【讨论】:

        【解决方案4】:

        这是快速简便的 VB.Net 解决方案:

        添加对 Symbol.ResourceCoordination.dll 的引用(我在这里找到了我的:C:\Program Files\Motorola EMDK for .NET\v2.8\SDK\Smart Devices\Symbol.ResourceCoordination.dll)。

        然后使用以下代码访问 ESN(电子序列号)值。

        Dim Version As New Symbol.ResourceCoordination.TerminalInfo
        MsgBox(Version.ESN)
        

        在我们的 MC3190S 扫描仪上表现出色! :)

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-04-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多