1 Reply Latest reply on Sep 8, 2016 10:51 AM by Bill Hecox

    Error in compiling BarcodeSample1  EMDK 2.1 Xamarin

    Terry Tongumpun
      ErrorCS1503Argument 2: cannot convert from 'BarcodeSample1.MainActivity' to 'Symbol.XamarinEMDK.EMDKManager.IEMDKListener'

       

       

      Guys. I can't figure this error out.  I downloaded the xamarin 2.1 sample and compiled it against my MC40 device running 4.1.1 .

      The error is located on

       // The EMDKManager object will be created and returned in the callback
                  EMDKResults results = EMDKManager.GetEMDKManager(Application.Context, this);
      

       

      I get a squiggle line under "this"

       

      Here's the code

       

      using System;
      using System.Threading;
      using System.Collections.Generic;
      
      
      using Android.App;
      using Android.Content;
      using Android.Runtime;
      using Android.Views;
      using Android.Widget;
      using Android.OS;
      
      
      
      
      using Symbol.XamarinEMDK;
      using Symbol.XamarinEMDK.Barcode;
      
      
      namespace BarcodeSample1
      {
          [Activity(Label = "BarcodeSample1", MainLauncher = true, Icon = "@drawable/icon", ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait)]
      
      
          public class MainActivity : Activity
          {
              // Declare a variable to store EMDKManager object
              private EMDKManager emdkManager = null;
      
      
              // Declare a variable to store BarcodeManager object
              private BarcodeManager barcodeManager = null;
      
      
              // Declare a variable to store Scanner object
              private Scanner scanner = null;
      
      
              // Declare a flag for continuous scan mode
              private bool isContinuousMode = false;
      
      
              // Declare a flag to save the current state of continuous mode flag during OnPause() and Bluetooth scanner Disconnected event.
              private bool isContinuousModeSaved = false;
      
      
              private TextView textViewData = null;
              private TextView textViewStatus = null;
      
      
              private CheckBox checkBoxEAN8 = null;
              private CheckBox checkBoxEAN13 = null;
              private CheckBox checkBoxCode39 = null;
              private CheckBox checkBoxCode128 = null;
              private CheckBox checkBoxContinuous = null;
      
      
              private Spinner spinnerScanners = null;
              private Spinner spinnerTriggers = null;
      
      
              private IList<ScannerInfo> scannerList = null;
      
      
              private int scannerIndex = 0; // Keep the selected scanner
              private int defaultIndex = 0; // Keep the default scanner 
              private int triggerIndex = 0; // Keep the selected trigger
      
      
              private int dataCount = 0;
      
      
              private string statusString = "";
      
      
      
      
      
      
              protected override void OnCreate(Bundle bundle)
              {
                  base.OnCreate(bundle);
      
      
                  // Set our view from the "main" layout resource
                  SetContentView(Resource.Layout.Main);
      
      
                  textViewData = FindViewById<TextView>(Resource.Id.textViewData) as TextView;
                  textViewStatus = FindViewById<TextView>(Resource.Id.textViewStatus) as TextView;
      
      
                  AddStartScanButtonListener();
                  AddStopScanButtonListener();
                  AddSpinnerScannersListener();
                  AddSpinnerTriggersListener();
                  AddCheckBoxContinuousListener();
                  AddCheckBoxDecodersListener();
      
      
                  PopulateTriggers();
      
      
                  // The EMDKManager object will be created and returned in the callback
                  EMDKResults results = EMDKManager.GetEMDKManager(Application.Context, this);
      
      
      
      
                  // Check the return status of GetEMDKManager
                  if (results.StatusCode != EMDKResults.STATUS_CODE.Success)
                  {
                      // EMDKManager object initialization success
                      textViewStatus.Text = "Status: EMDKManager object creation failed.";
                  }
                  else
                  {
                      // EMDKManager object initialization failed
                      textViewStatus.Text = "Status: EMDKManager object creation succeeded.";
                  }
              }
              protected override void OnDestroy()
              {
                  base.OnDestroy();
      
      
                  // De-initialize scanner
                  DeInitScanner();
      
      
                  // Clean up the objects created by EMDK manager
                  if (barcodeManager != null)
                  {
                      // Remove connection listener
                      barcodeManager.Connection -= barcodeManager_Connection;
                      barcodeManager = null;
                  }
      
      
                  if (emdkManager != null)
                  {
                      emdkManager.Release();
                      emdkManager = null;
                  }
              }
              protected override void OnPause()
              {
                  base.OnPause();
                  // The application is in background
      
      
                  // Save the current state of continuous mode flag
                  isContinuousModeSaved = isContinuousMode;
      
      
                  // Reset continuous flag 
                  isContinuousMode = false;
      
      
                  // De-initialize scanner
                  DeInitScanner();
      
      
                  if (barcodeManager != null)
                  {
                      // Remove connection listener
                      barcodeManager.Connection -= barcodeManager_Connection;
                      barcodeManager = null;
      
      
                      // Clear scanner list
                      scannerList = null;
                  }
      
      
                  // Release the barcode manager resources
                  if (emdkManager != null)
                  {
                      emdkManager.Release(EMDKManager.FEATURE_TYPE.Barcode);
                  }
              }
              protected override void OnResume()
              {
                  base.OnResume();
                  // The application is in foreground 
      
      
                  // Restore continuous mode flag
                  isContinuousMode = isContinuousModeSaved;
      
      
                  // Acquire the barcode manager resources
                  if (emdkManager != null)
                  {
                      try
                      {
                          barcodeManager = (BarcodeManager)emdkManager.GetInstance(EMDKManager.FEATURE_TYPE.Barcode);
      
      
                          if (barcodeManager != null)
                          {
                              // Add connection listener
                              barcodeManager.Connection += barcodeManager_Connection;
                          }
      
      
                          // Enumerate scanners 
                          EnumerateScanners();
      
      
                          // Set selected scanner 
                          spinnerScanners.SetSelection(scannerIndex);
      
      
                          // Set selected trigger
                          spinnerTriggers.SetSelection(triggerIndex);
                      }
                      catch (Exception e)
                      {
                          textViewStatus.Text = "Status: BarcodeManager object creation failed.";
                          Console.WriteLine("Exception: " + e.StackTrace);
                      }
                  }
              }
              public void OnClosed()
              {
                  // This callback will be issued when the EMDK closes unexpectedly.
      
      
                  if (emdkManager != null)
                  {
                      if (barcodeManager != null)
                      {
                          // Remove connection listener
                          barcodeManager.Connection -= barcodeManager_Connection;
                          barcodeManager = null;
                      }
      
      
                      // Release all the resources
                      emdkManager.Release();
                      emdkManager = null;
                  }
      
      
                  textViewStatus.Text = "Status: EMDK closed unexpectedly! Please close and restart the application.";
              }
              public void OnOpened(EMDKManager emdkManagerInstance)
              {
                  // This callback will be issued when the EMDK is ready to use.
                  textViewStatus.Text = "Status: EMDK open success.";
      
      
                  this.emdkManager = emdkManagerInstance;
      
      
                  try
                  {
                      // Acquire the barcode manager resources
                      barcodeManager = (BarcodeManager)emdkManager.GetInstance(EMDKManager.FEATURE_TYPE.Barcode);
      
      
                      if (barcodeManager != null)
                      {
                          // Add connection listener
                          barcodeManager.Connection += barcodeManager_Connection;
                      }
      
      
                      // Enumerate scanner devices
                      EnumerateScanners();
      
      
                      // Set default scanner
                      spinnerScanners.SetSelection(defaultIndex);
      
      
                      // Set trigger (App default - HARD)
                      spinnerTriggers.SetSelection(triggerIndex);
                  }
                  catch (Exception e)
                  {
                      textViewStatus.Text = "Status: BarcodeManager object creation failed.";
                      Console.WriteLine("Exception:" + e.StackTrace);
                  }
              }
              void barcodeManager_Connection(object sender, BarcodeManager.ScannerConnectionEventArgs e)
              {
                  string status;
                  string scannerName = "";
      
      
                  ScannerInfo scannerInfo = e.P0;
                  BarcodeManager.ConnectionState connectionState = e.P1;
      
      
                  string statusBT = connectionState.ToString();
                  string scannerNameBT = scannerInfo.FriendlyName;
      
      
                  if (scannerList.Count != 0)
                  {
                      scannerName = scannerList[scannerIndex].FriendlyName;
                  }
      
      
                  if (scannerName.ToLower().Equals(scannerNameBT.ToLower()))
                  {
                      status = "Status: " + scannerNameBT + ":" + statusBT;
                      RunOnUiThread(() => textViewStatus.Text = status);
      
      
                      if (connectionState == BarcodeManager.ConnectionState.Connected)
                      {
                          // Bluetooth scanner connected
      
      
                          // Restore continuous mode flag
                          isContinuousMode = isContinuousModeSaved;
      
      
                          // Initialize scanner
                          InitScanner();
                          SetTrigger();
                          SetDecoders();
                      }
      
      
                      if (connectionState == BarcodeManager.ConnectionState.Disconnected)
                      {
                          // Bluetooth scanner disconnected
      
      
                          // Save the current state of continuous mode flag
                          isContinuousModeSaved = isContinuousMode;
      
      
                          // Reset continuous flag 
                          isContinuousMode = false;
      
      
                          // De-initialize scanner
                          DeInitScanner();
      
      
                          // Enable UI Controls
                          RunOnUiThread(() => EnableUIControls(true));
                      }
                  }
                  else
                  {
                      status = "Status: " + statusString + " " + scannerNameBT + ":" + statusBT;
                      RunOnUiThread(() => textViewStatus.Text = status);
                  }
              }
              private void AddStartScanButtonListener()
              {
                  Button buttonStartScan = FindViewById<Button>(Resource.Id.buttonStartScan);
                  buttonStartScan.Click += buttonStartScan_Click;
              }
              void buttonStartScan_Click(object sender, EventArgs e)
              {
                  if (scanner == null)
                  {
                      InitScanner();
                  }
      
      
                  if (scanner != null)
                  {
                      try
                      {
                          // Set continuous flag
                          isContinuousMode = checkBoxContinuous.Checked;
      
      
                          // Submit a new read.
                          scanner.Read();
      
      
                          // Disable UI controls
                          RunOnUiThread(() => EnableUIControls(false));
                      }
                      catch (ScannerException ex)
                      {
                          textViewStatus.Text = "Status: " + ex.Message;
                          Console.WriteLine(ex.StackTrace);
                      }
                  }
              }
              private void AddStopScanButtonListener()
              {
                  Button buttonStopScan = FindViewById<Button>(Resource.Id.buttonStopScan);
                  buttonStopScan.Click += buttonStopScan_Click;
      
      
              }
              void buttonStopScan_Click(object sender, EventArgs e)
              {
                  if (scanner != null)
                  {
                      try
                      {
                          // Reset continuous flag 
                          isContinuousMode = false;
      
      
                          // Cancel the pending read.
                          scanner.CancelRead();
      
      
                          // Enable UI controls
                          RunOnUiThread(() => EnableUIControls(true));
                      }
                      catch (ScannerException ex)
                      {
                          textViewStatus.Text = "Status: " + ex.Message;
                          Console.WriteLine(ex.StackTrace);
                      }
                  }
              }
              private void AddSpinnerScannersListener()
              {
                  spinnerScanners = FindViewById<Spinner>(Resource.Id.spinnerScanners);
                  spinnerScanners.ItemSelected += spinnerScanners_ItemSelected;
              }
      
      
              void spinnerScanners_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
              {
                  scannerIndex = e.Position;
                  DeInitScanner();
                  InitScanner();
                  SetTrigger();
                  SetDecoders();
              }
      
      
              private void AddSpinnerTriggersListener()
              {
                  spinnerTriggers = FindViewById<Spinner>(Resource.Id.spinnerTriggers);
                  spinnerTriggers.ItemSelected += spinnerTriggers_ItemSelected;
              }
              void spinnerTriggers_ItemSelected(object sender, AdapterView.ItemSelectedEventArgs e)
              {
                  triggerIndex = e.Position;
                  SetTrigger();
              }
      
      
              private void AddCheckBoxContinuousListener()
              {
                  checkBoxContinuous = FindViewById<CheckBox>(Resource.Id.checkBoxContinuous);
                  checkBoxContinuous.CheckedChange += checkBoxContinuous_CheckedChange;
              }
      
      
              void checkBoxContinuous_CheckedChange(object sender, CompoundButton.CheckedChangeEventArgs e)
              {
                  isContinuousMode = e.IsChecked;
              }
      
      
              private void AddCheckBoxDecodersListener()
              {
                  checkBoxEAN8 = FindViewById<CheckBox>(Resource.Id.checkBoxEAN8);
                  checkBoxEAN13 = FindViewById<CheckBox>(Resource.Id.checkBoxEAN13);
                  checkBoxCode39 = FindViewById<CheckBox>(Resource.Id.checkBoxCode39);
                  checkBoxCode128 = FindViewById<CheckBox>(Resource.Id.checkBoxCode128);
      
      
                  checkBoxEAN8.CheckedChange += decoders_CheckedChange;
                  checkBoxEAN13.CheckedChange += decoders_CheckedChange;
                  checkBoxCode39.CheckedChange += decoders_CheckedChange;
                  checkBoxCode128.CheckedChange += decoders_CheckedChange;
              }
      
      
              void decoders_CheckedChange(object sender, CompoundButton.CheckedChangeEventArgs e)
              {
                  SetDecoders();
              }
              private void EnumerateScanners()
              {
                  if (barcodeManager != null)
                  {
                      int spinnerIndex = 0;
                      List<string> friendlyNameList = new List<string>();
      
      
                      // Query the supported scanners on the device
                      scannerList = barcodeManager.SupportedDevicesInfo;
      
      
                      if ((scannerList != null) && (scannerList.Count > 0))
                      {
                          foreach (ScannerInfo scnInfo in scannerList)
                          {
                              friendlyNameList.Add(scnInfo.FriendlyName);
      
      
                              // Save index of the default scanner (device specific one)
                              if (scnInfo.IsDefaultScanner)
                              {
                                  defaultIndex = spinnerIndex;
                              }
      
      
                              ++spinnerIndex;
                          }
                      }
                      else
                      {
                          textViewStatus.Text = "Status: Failed to get the list of supported scanner devices! Please close and restart the application.";
                      }
      
      
                      // Populate the friendly names of the supported scanners into spinner
                      ArrayAdapter<string> spinnerAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleSpinnerItem, friendlyNameList);
                      spinnerAdapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);
                      spinnerScanners.Adapter = spinnerAdapter;
                  }
              }
      
      
              private void PopulateTriggers()
              {
                  // Populate the trigger types into spinner
                  var spinnerAdapter = ArrayAdapter.CreateFromResource(this, Resource.Array.triggers_array, Android.Resource.Layout.SimpleSpinnerItem);
                  spinnerAdapter.SetDropDownViewResource(Android.Resource.Layout.SimpleSpinnerDropDownItem);
                  spinnerTriggers.Adapter = spinnerAdapter;
              }
      
      
              private void InitScanner()
              {
                  if (scanner == null)
                  {
                      if ((scannerList != null) && (scannerList.Count > 0))
                      {
                          // Get new scanner device based on the selected index
                          scanner = barcodeManager.GetDevice(scannerList[scannerIndex]);
                      }
                      else
                      {
                          textViewStatus.Text = "Status: Failed to get the specified scanner device! Please close and restart the application.";
                          return;
                      }
      
      
                      if (scanner != null)
                      {
                          // Add data listener
                          scanner.Data += scanner_Data;
      
      
                          // Add status listener
                          scanner.Status += scanner_Status;
      
      
                          try
                          {
                              // Enable the scanner
                              scanner.Enable();
                          }
                          catch (ScannerException e)
                          {
                              textViewStatus.Text = "Status: " + e.Message;
                              Console.WriteLine(e.StackTrace);
                          }
                      }
                      else
                      {
                          textViewStatus.Text = "Status: Failed to initialize the scanner device.";
                      }
                  }
              }
              void scanner_Status(object sender, Scanner.StatusEventArgs e)
              {
                  StatusData statusData = e.P0;
                  StatusData.ScannerStates state = e.P0.State;
      
      
                  if (state == StatusData.ScannerStates.Idle)
                  {
                      statusString = "Status: " + statusData.FriendlyName + " is enabled and idle...";
                      RunOnUiThread(() => textViewStatus.Text = statusString);
      
      
                      if (isContinuousMode)
                      {
                          try
                          {
                              // An attempt to use the scanner continuously and rapidly (with a delay < 100 ms between scans) 
                              // may cause the scanner to pause momentarily before resuming the scanning. 
                              // Hence add some delay (>= 100ms) before submitting the next read.
                              try
                              {
                                  Thread.Sleep(100);
                              }
                              catch (Exception ex)
                              {
                                  Console.WriteLine(ex.StackTrace);
                              }
      
      
                              // Submit another read to keep the continuation
                              scanner.Read();
                          }
                          catch (ScannerException ex)
                          {
                              statusString = "Status: " + ex.Message;
                              RunOnUiThread(() => textViewStatus.Text = statusString);
                              Console.WriteLine(ex.StackTrace);
                          }
                          catch (NullReferenceException ex)
                          {
                              statusString = "Status: An error has occurred.";
                              RunOnUiThread(() => textViewStatus.Text = statusString);
                              Console.WriteLine(ex.StackTrace);
                          }
                      }
      
      
                      RunOnUiThread(() => EnableUIControls(true));
                  }
      
      
                  if (state == StatusData.ScannerStates.Waiting)
                  {
                      statusString = "Status: Scanner is waiting for trigger press...";
                      RunOnUiThread(() =>
                      {
                          textViewStatus.Text = statusString;
                          EnableUIControls(false);
                      });
                  }
      
      
                  if (state == StatusData.ScannerStates.Scanning)
                  {
                      statusString = "Status: Scanning...";
                      RunOnUiThread(() =>
                      {
                          textViewStatus.Text = statusString;
                          EnableUIControls(false);
                      });
                  }
      
      
                  if (state == StatusData.ScannerStates.Disabled)
                  {
                      statusString = "Status: " + statusData.FriendlyName + " is disabled.";
                      RunOnUiThread(() =>
                      {
                          textViewStatus.Text = statusString;
                          EnableUIControls(true);
                      });
                  }
      
      
                  if (state == StatusData.ScannerStates.Error)
                  {
                      statusString = "Status: An error has occurred.";
                      RunOnUiThread(() =>
                      {
                          textViewStatus.Text = statusString;
                          EnableUIControls(true);
                      });
                  }
              }
      
      
              void scanner_Data(object sender, Scanner.DataEventArgs e)
              {
                  ScanDataCollection scanDataCollection = e.P0;
      
      
                  if ((scanDataCollection != null) && (scanDataCollection.Result == ScannerResults.Success))
                  {
                      IList<ScanDataCollection.ScanData> scanData = scanDataCollection.GetScanData();
      
      
                      foreach (ScanDataCollection.ScanData data in scanData)
                      {
                          string dataString = data.Data;
                          RunOnUiThread(() => DisplayScanData(dataString));
                      }
                  }
              }
      
      
              private void DeInitScanner()
              {
                  if (scanner != null)
                  {
                      try
                      {
                          // Cancel if there is any pending read
                          scanner.CancelRead();
      
      
                          // Disable the scanner 
                          scanner.Disable();
                      }
                      catch (ScannerException e)
                      {
                          textViewStatus.Text = "Status: " + e.Message;
                          Console.WriteLine(e.StackTrace);
                      }
      
      
                      // Remove data listener
                      scanner.Data -= scanner_Data;
      
      
                      // Remove status listener
                      scanner.Status -= scanner_Status;
      
      
                      try
                      {
                          // Release the scanner
                          scanner.Release();
                      }
                      catch (ScannerException e)
                      {
                          textViewStatus.Text = "Status: " + e.Message;
                          Console.WriteLine(e.StackTrace);
                      }
      
      
                      scanner = null;
                  }
              }
      
      
              private void SetTrigger()
              {
                  if (scanner == null)
                  {
                      InitScanner();
                  }
      
      
                  if (scanner != null)
                  {
                      switch (triggerIndex)
                      {
                          case 0: // Selected "HARD"
                              scanner.TriggerType = Scanner.TriggerTypes.Hard;
                              break;
                          case 1: // Selected "SOFT"
                              scanner.TriggerType = Scanner.TriggerTypes.SoftAlways;
                              break;
                          default:
                              break;
                      }
                  }
              }
      
      
              private void SetDecoders()
              {
                  if (scanner == null)
                  {
                      InitScanner();
                  }
      
      
                  if (scanner != null)
                  {
                      try
                      {
                          // Config object should be taken out before changing.
                          ScannerConfig config = scanner.GetConfig();
      
      
                          // Set EAN8
                          config.DecoderParams.Ean8.Enabled = checkBoxEAN8.Checked;
      
      
                          // Set EAN13
                          config.DecoderParams.Ean13.Enabled = checkBoxEAN13.Checked;
      
      
                          // Set Code39
                          config.DecoderParams.Code39.Enabled = checkBoxCode39.Checked;
      
      
                          // Set Code128
                          config.DecoderParams.Code128.Enabled = checkBoxCode128.Checked;
      
      
                          // Should be assigned back to the property to get the changes to the lower layers.
                          scanner.SetConfig(config);
                      }
                      catch (ScannerException e)
                      {
                          textViewStatus.Text = "Status: " + e.Message;
                          Console.WriteLine(e.StackTrace);
                      }
                  }
              }
      
      
              private void EnableUIControls(bool isEnabled)
              {
                  checkBoxEAN8.Enabled = isEnabled;
                  checkBoxEAN13.Enabled = isEnabled;
                  checkBoxCode39.Enabled = isEnabled;
                  checkBoxCode128.Enabled = isEnabled;
                  spinnerScanners.Enabled = isEnabled;
                  spinnerTriggers.Enabled = isEnabled;
              }
      
      
              private void DisplayScanData(string data)
              {
                  if (dataCount++ > 100)
                  {
                      // Clear the cache after 100 scans
                      textViewData.Text = "";
                      dataCount = 0;
                  }
      
      
                  textViewData.Append(data + "\r\n");
      
      
                  var scrollview = FindViewById<ScrollView>(Resource.Id.scrollView1);
                  scrollview.FullScroll(FocusSearchDirection.Down);
              }
          }
      }
      

       

      Need some help here.