Api 如何获取摩托罗拉(Symbol)移动设备序列号?
如何获取摩托罗拉(Symbol)移动设备序列号 我正在为摩托罗拉ES400编程,它带有“符号”库 似乎有办法获得各种扫描仪的序列号,但实际设备本身却没有 有人有什么想法吗Api 如何获取摩托罗拉(Symbol)移动设备序列号?,api,windows-mobile,mobile,pocketpc,Api,Windows Mobile,Mobile,Pocketpc,如何获取摩托罗拉(Symbol)移动设备序列号 我正在为摩托罗拉ES400编程,它带有“符号”库 似乎有办法获得各种扫描仪的序列号,但实际设备本身却没有 有人有什么想法吗 “序列号”(如设备上所示)与TerminalInfo返回的“电子序列号”有什么区别 我刚刚在MC9090设备上处理过这个问题,它也使用符号库(不确定它们是否相同,但值得一试)。我使用反射是因为我有来自不同制造商的设备,并且希望运行相同的代码。您可以直接从属性访问此字段或使用反射: try {
“序列号”(如设备上所示)与TerminalInfo返回的“电子序列号”有什么区别 我刚刚在MC9090设备上处理过这个问题,它也使用符号库(不确定它们是否相同,但值得一试)。我使用反射是因为我有来自不同制造商的设备,并且希望运行相同的代码。您可以直接从属性访问此字段或使用反射:
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);
}
这里是财产所在地:
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);
}
希望这有帮助 太好了,谢谢。Symbol SDK帮助在搜索时未找到此项 刚刚使用的:
Symbol.ResourceCoordination.TerminalInfo Version = new Symbol.ResourceCoordination.TerminalInfo();
return Version.ESN;
还发现:
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();
以下是快速简便的VB.Net解决方案: 添加对Symbol.resourcecordination.dll的引用(我在这里找到了我的:C:\Program Files\Motorola EMDK for.NET\v2.8\SDK\Smart Devices\Symbol.resourcecordination.dll) 然后使用以下代码访问ESN(电子序列号)值
在我们的MC3190S扫描仪上工作得很好!:) 为什么所有的for/each循环?为什么不使用GetType(string)来获取TerminalInfo类型,使用GetProperty(string)来获取ESN属性呢?由于ESN可能永远不会改变,我建议缓存获取的值,以防止多次这样做。我确实缓存了它,并且只有在没有它的情况下才调用它。for/each循环是因为GetType(string)方法返回null,我实在花不了太多时间来弄清楚原因。