使用Zebra Datawedge API切换RFID存储区后无Intent接收问题
Zebra MC33 RFID应用切换至USER存储区后无法接收Datawedge广播Intent
我正在为Zebra MC33设备开发一款RFID应用,用于读取标签ID(对应Memorybank NONE)和标签用户数据(对应Memorybank USER)。由于应用版本过低且无法升级,无法使用Zebra官方SDK。
初始状态下应用处于Memorybank NONE模式,能够读取标签ID并通过Intent接收数据。但一旦通过软件切换至USER存储区后,广播接收器不再响应Intent,不过Datawedge应用中的存储区配置已被正确修改。
切换存储区方法
public static void ChangeMemoryBank(Android.Content.Context context, string memoryBank) { setConfigBundle.PutString("PROFILE_NAME", PROFILE_NAME); setConfigBundle.PutString("PROFILE_ENABLED", "true"); setConfigBundle.PutString("CONFIG_MODE", "UPDATE"); setConfigBundle.PutString("RESET_CONFIG", "false"); rfidConfigParamBundle.PutString("rfid_memory_bank", memoryBank); rfidConfigBundle.PutString("PLUGIN_NAME", "RFID"); rfidConfigBundle.PutString("RESET_CONFIG", "false"); rfidConfigBundle.PutBundle("PARAM_LIST", rfidConfigParamBundle); IList<IParcelable> configBundles = new List<IParcelable> { rfidConfigBundle }; setConfigBundle.PutParcelableArrayList("PLUGIN_CONFIG", configBundles); // Broadcast the intent Intent intent = new Intent(); intent.SetAction("com.symbol.datawedge.api.ACTION"); intent.PutExtra("com.symbol.datawedge.api.SET_CONFIG", setConfigBundle); context.SendBroadcast(intent); }
停止RFID扫描
public void StopRFIDScan(Object source, ElapsedEventArgs e) { Intent intent = new Intent(); intent.SetAction("com.symbol.datawedge.api.ACTION"); intent.PutExtra("com.symbol.datawedge.api.SOFT_RFID_TRIGGER", "STOP_SCANNING"); SendBroadcast(intent); }
启动RFID扫描
public void StartRFIDScan() { Intent intent = new Intent(); intent.SetAction("com.symbol.datawedge.api.ACTION"); intent.PutExtra("com.symbol.datawedge.api.SOFT_RFID_TRIGGER", "START_SCANNING"); SendBroadcast(intent); }
Intent监听器(广播接收器收到Intent时调用)
public void IntentListener(string data) { if(data.Length < 50) // True if data contains the Tag ID (always smaller than 50 characters) { ValueText.Text = data; ChangeMemoryBank("1"); //Switch to USER Memorybank } else { ValueText.Text = "|" + data; ChangeMemoryBank("0"); //Switch to NO Memorybank } }
广播接收器
[BroadcastReceiver(Enabled = true)] public class ScanReceiver:BroadcastReceiver { /// <summary> /// Called if the broadcast receiver gets an intent /// </summary> /// <param name="context"></param> /// <param name="intent"></param> public override void OnReceive(Context context, Intent intent) { string dataString = intent.GetStringExtra("com.symbol.datawedge.data_string"); SingleInActivity.Instance.RunOnUiThread(() => { SingleInActivity.Instance.IntentListener(dataString); }); } }
内容的提问来源于stack exchange,提问作者DaveR
相关产品推荐
相关产品推荐

