2016-12-19 2 views
0

Ich versuche, eine Android App für RFID-Kartenleser zu machen (i nicht NFC bin mit), für das ich einen hohe frquency RFID-Kartenleser durch OTG Kabel verbinden und Ich verwende EditText, wo die Kartennummer angezeigt wird. es funktioniert gut, aber das Problem ist, dass es manchmal mehrere Zeitkartennummer erkennt.Rfid Kartenleser Wert android Erkennung zweimal

1- Jede Idee, wie kann ich das auflösen (ich kann keine Größenbeschränkungsbedingung setzen, weil die Kartennummer nicht festgelegt ist)?

2- Ein weiteres Problem, wenn ich Ultra-Hochfrequenz-Kartenleser verwenden dann Karte zeigt anderen Wert, jede Idee, wie kann ich eine Android-App, die beide Frequenzkartenleser unterstützt.

Antwort

0

Rfid weiter lesen Tag seine nicht einmal lesen so aus dieser Wiederholung müssen Sie auf Ihre Seite verwalten. Überprüfen Sie die Lesedaten oder nicht, wenn ja, dann ignorieren. Führen Sie den Aufruf Wo implementieren Rfid-Methoden und seine Lesedaten behandeln.

public class ReaderListener implements RfidEventListener { 

     private RfidReader reader; 
     private ReadInventory eventForm; 
     //private ItemTransfer eventFormitm; 
     private final ToneGenerator tg = new ToneGenerator(5, 100); 
     private boolean isEnabled; 
     private Map<String, Long> scannedItemsMap = new TreeMap<String, Long>(); 

     public ReaderListener(ReadInventory frm, String make, String macid) throws ReaderConnectionException, LicenseExpiryException, IOException, GeneralSecurityException { 
      Log.d("Test1", " "+make.toString().trim()+" "+ macid.toString().trim()); 
      reader = RfidFactory.getInstance().getRfidReader(make.toString().trim(), macid.toString().trim(), 
        PlatformConnector.AndroidConnector.getPlatformName()); 

      Log.d("Test2", " "+reader+" "); 
      //reader.removeAllListeners(); 
      reader.registerListener(this); 
      setEnabled(true); 
      this.eventForm = frm; 
     } 


     @Override 
     public void handleData(String tagid, int arg1, int arg2) { 
      synchronized (scannedItemsMap) { 
       if (!scannedItemsMap.containsKey(tagid)) { 
        System.out.println("got data............ :" + tagid); 

        scannedItemsMap.put(tagid, System.currentTimeMillis()); 
        if (eventForm != null) { 
         eventForm.handleData(tagid); 
         //this.tg.startTone(25); 
         Log.d("tagid", " " + tagid + " "); 

        } 
        /*if (eventFormitm != null) { 
         eventFormitm.handleData(tagid); 
        }*/ 
       } else if (scannedItemsMap.containsKey(tagid)) { 
        scannedItemsMap.put(tagid, System.currentTimeMillis()); 
       } 
      } 
     } 

     @Override 
     public void handleError(String msg) { 
      if (eventForm != null) { 
       eventForm.handleError(msg); 
      } 
     } 

     @Override 
     public boolean isEnabled() { 
      return isEnabled; 
     } 

     @Override 
     public void setEnabled(boolean arg0) { 
      this.isEnabled = arg0; 
     } 

     public boolean startScan(int power,int speed) throws ReaderConnectionException { 
      if (reader != null && !reader.isScanning()) { 
       reader.setSession(RfidSession.ONE); 
       reader.setPower(power); 
       reader.setScanSpeed(speed); 
       reader.startScan(); 
      } 
      return true; 
     } 

     public void stopScan() throws ReaderConnectionException { 
      if (reader.isScanning()) 
       reader.stopScan(); 
     } 

     public boolean isScanning() { 
      return reader.isScanning(); 
     } 

     public boolean isConnected() { 
      return reader.isConnected(); 
     } 

     public void removeAll() { 
      scannedItemsMap.clear(); 
     } 

     public void remove(String tagid) { 
      scannedItemsMap.remove(tagid); 

     } 
     public int getBatteryLevel(){ 
      try { 
       return reader.getBatteryLevel(); 
      }catch (Exception e){ 
       return 0; 
      } 
     } 

     @Override 
     public void handleReaderEvent(ReaderEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
    } 

nun die Daten in Tätigkeit Griff ....

Show in folgenden Verfahren.

public void handleData(final String tagid) { 
     // TODO Auto-generated method stub 

     try { 
      final String Code_samplecode = convertHexToString(tagid); 

      // Log.e("Name", "Itemcode" + Code_samplecode); 
      if (SampleCode.contains(Code_samplecode)&& !p_SampleCode.contains(Code_samplecode)) { 
       // Scann items count 

       tgf.startTone(25); 

       int ind_val = SampleCode.indexOf(Code_samplecode); 

       if (ind_val != -1) { 

        final String SampleNo1 = SampleNo.get(ind_val); 
        final String StyleNo1 = StyleNo.get(ind_val); 
        final String SampleCode1 = SampleCode.get(ind_val); 
        final String StyleCode1 = StyleCode.get(ind_val); 
        //final String CartStyleCode1 = CartStyleCode.get(ind_val); 

        // final String CartStyleNo1 = CartStyleNo.get(ind_val); 


        SampleNo.remove(ind_val); 
        StyleNo.remove(ind_val); 
        SampleCode.remove(ind_val); 
        StyleCode.remove(ind_val); 

        runOnUiThread(new Runnable() { 

         @Override 
         public void run() { 
          // p_Code.add(Code.get(ind_val)); 
          p_SampleNo.add(SampleNo1); 
          p_StyleNo.add(StyleNo1); 
          p_SampleCode.add(SampleCode1); 
          p_StyleCode.add(StyleCode1); 


          //Code.remove(ind_val); 

//       adapter3.notifyDataSetChanged(); 
//       adapter1.notifyDataSetChanged(); 

          total_item.setAdapter(null); 

          adapter3 = new Adapter_for_Inventoryitem(ReadInventory.this, 
            StyleNo, SampleNo); 
          total_item.setAdapter(adapter3); 
          present_item.setAdapter(null); 

          adapter1 = new Adapter_for_Inventoryitem(ReadInventory.this, 
            p_StyleNo, p_SampleNo); 
          present_item.setAdapter(adapter1); 




          textvie.setText("Total " + p_SampleNo.size() + " Found Styles"); 
          textvi.setText("Total " + SampleNo.size() + " Available Styles"); 

          List<Inventory> c = db.get_all_data_INVENTARY_Query("SELECT * FROM Inventory_n WHERE SampleCode ='" + SampleCode1 + "'"); 
          if (c.size() > 0) { 
           db.execute_query("INSERT INTO Inventory_p (Code, SampleNo,StyleNo,SampleCode,StyleCode,CartStyleNo,CartStyleCode) VALUES ('" + c.get(0).getCode() + "' , \"" + 
             c.get(0).getSampleNo() + "\" , \"" + c.get(0).getStyleNo() + "\" , '" + 
             c.get(0).getSampleCode() + "' , '" + c.get(0).getStyleCode() + "' , \"" + 
             c.get(0).getCartStyleNo() + "\" , '" + c.get(0).getCartStyleCode() + "')"); 
          } 
          db.execute_query("DELETE FROM Inventory_n WHERE SampleCode ='" + SampleCode1 + "'"); 


         } 
        }); 


       } 
      } else { 

       if (!SampleCode.contains(Code_samplecode) && !p_SampleCode.contains(Code_samplecode) 
         && !not_fount_items.contains(Code_samplecode)) { 

         tgn.startTone(20); 

        scanneditems_unkown = scanneditems_unkown + 1; 
        runOnUiThread(new Runnable() { 

         @Override 
         public void run() { 
          not_fount_items.add(Code_samplecode); 

          not_fount_items_txt.setText("Total " + not_fount_items.size() + " Unknown Styles"); 


         } 
        }); 
       } 

      } 

      runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 

        scan_counts.setText("Total " + p_SampleNo.size() + " Scanned"); 
        scan_counts_unknown.setText("Total " + scanneditems_unkown + " Unknown"); 

        last_scanned_items.setText("Item : " + Code_samplecode); 


       } 
      }); 

     } catch (Exception e) { 
      e.printStackTrace(); 

      Message message = new Message(); 
      message.what = READEREXCEPTION; 
      itemDetectedHandler.sendMessage(message); 

     } 
    } 
+0

Wie implementieren Sie RfidEventListener in obigem Code? –

+0

OnClickEvent der Schaltfläche diese Klasse aufrufen. Übergeben Sie den Parameter in den Konstruktor. –