2010-12-31 5 views
3

Как получить серийный номер мобильного устройства Motorola (Symbol)?Как получить серийный номер мобильного устройства Motorola (Symbol)?

Я программирую Motorola ES400, который поставляется с библиотеками «Symbol».

Возможно, существуют способы получения серийных номеров различных сканеров, но не самого устройства!

У кого-нибудь есть идеи?


Что разница между «серийным номером» (как показано на устройстве) и «электронный серийный номер», возвращенного TerminalInfo?

ответ

4

Я только что рассмотрел это на устройстве 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); 
     } 

Надеется, что это помогает!

+0

Почему все для/каждого цикла? Почему бы не использовать GetType (string) для получения типа TerminalInfo и аналогично GetProperty (строка), чтобы получить свойство ESN? И поскольку ESN, по-видимому, никогда не изменится, я бы рекомендовал кэшировать значение, полученное после его получения, чтобы предотвратить это более одного раза. – ctacke

+0

Я сделал кеш этого и только вызвал его, если у меня его еще не было. Петли for/each были вызваны тем, что метод GetType (string) возвращал значение null, и я не мог занять слишком много времени, чтобы понять, почему. – IronicMuffin

0

Thats fantatic, спасибо. Справка Symbol SDK не нашла это при поиске!

Просто использовали:

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

     return Version.ESN; 
0

найдены Также это:

  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(); 
0

Вот быстрое и простое решение VB.Net:

Добавить ссылку на Symbol.ResourceCoordination.dll (I нашел здесь: C: \ Program Files \ Motorola EMDK для .NET \ v2.8 \ SDK \ Smart Devices \ Symbol.ResourceCoordination.dll).

Затем используйте следующий код для доступа к значению ESN (электронный серийный номер).

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

Отлично работает на наших сканерах MC3190S! :)