为什么我从不在本机界面中输入特定的回调函数?

时间:2019-04-01 07:50:08

标签: codenameone

我正在开发一个应用程序,该应用程序必须检测蓝牙读卡器,以及是否要从其中读取或插入卡。

我在本机接口中为android部分使用了API,因此我从一个涉及蓝牙读卡器检测的接口实现了两个回调函数,而另一个涉及了在蓝牙读卡器中检测卡的回调函数实现了两个回调函数。

检测到蓝牙读卡器时将调用两个回调函数,将卡插入设备或从设备中拔出时将调用另外两个回调函数。

在检测到蓝牙读卡器时调用的回调没有问题,但是应用程序从不调用插入或取出卡时必须调用的函数。

public class FtReaderNativeImpl implements BluetoothRead.CardListener,BluetoothRead.ReaderListener{

    private BluetoothRead btRead;
    ArrayList<BluetoothDevice> listRead;

    public String scanBluetooth(){
        String chaine ="";
        if (Looper.myLooper() == null)
        { 
          Looper.prepare();
        }
        Log.p("btread avant init:"+btRead);
        btRead = new 

     BluetoothRead(com.codename1.impl.android.AndroidNativeUtil.getContext());
     btRead.setCardListener(this);
     btRead.setReaderListener(this);
     ReturnCode rc = btRead.btInitLib();
     Log.p("btread après init:"+btRead);
     Log.p("rc:"+rc);
     return chaine;
    }
       @Override
       public void CardInserted()
       {
                //showMessage("onCardInserted");
                String chaine=""; 
                //Toast.makeText(com.codename1.impl.android.AndroidNativeUtil.getActivity(), "INSERTED", Toast.LENGTH_SHORT).show();
                chaine+=btRead.getName();
                chaine+=btRead.getFirstName();
                eidReader.showDialog("INSERTED "+chaine);
                Log.p("btInsertOK");
       }

       @Override
       public void CardRemoved()
       {
                   String chaine=""; 
                   //Toast.makeText(com.codename1.impl.android.AndroidNativeUtil.getActivity(), "REMOVED", Toast.LENGTH_SHORT).show();
                   EidReader.showDialog("REMOVED "+chaine);
                   Log.p("btRemoveNOK");
       }

       @Override
       public void ReaderConnected(BluetoothDevice bluetoothDevice) 
       {
           /*Toast.makeText(com.codename1.impl.android.AndroidNativeUtil.getActivity(), "CONNECTED", Toast.LENGTH_SHORT).show();*/
          EidReader.showDialog("CONNECTED");
          Log.p("onReaderConnected: " + bluetoothDevice.getName());
          if (btRead.btOpen(bluetoothDevice) == ReturnCode.OK) {
             Log.p("btOpen OK");

          } else {
             Log.p("btOpen NOK");
          }
          Log.p("btread après listener:"+btRead);
       }

       @Override
       public void ReaderDisconnected(BluetoothDevice bluetoothDevice) 
       {
          //Toast.makeText(com.codename1.impl.android.AndroidNativeUtil.getActivity(), "DISCONNECTED", Toast.LENGTH_SHORT).show();
           EidReader.showDialog("DISCONNECTED");
       }}

ScanBluetooth只是一种初始化方法,在表格的开头被调用:

public class EidReader extends Form implements HasLogger {

Container loggatt = new Container();
    private Bluetooth bt;
    private static Container devicesCnt;
    private Map devices = new HashMap();
    Form main = this;
    FtReaderNative frn;

    public EidReader(Form parent)
    {
        this.setLayout(new BoxLayout(BoxLayout.Y_AXIS));
        Display dis = Display.getInstance();
        frn = (FtReaderNative)NativeLookup.create(FtReaderNative.class);
        if(dis.getPlatformName().compareTo("and")==0){
            LocationManager lm = LocationManager.getLocationManager();
        }
        bt = new Bluetooth();
        frn.scanBluetooth();
        //combo.setRenderer(new GenericListCellRenderer<>(new MultiButton(),new MultiButton()));
        this.add(new Button(new Command("enable bluetooth")
        {
            @Override
            public void actionPerformed(ActionEvent evt){

                try {
                    if (!bt.isEnabled()) {
                        bt.enable();
                    }
                    if (!bt.hasPermission()) {
                        bt.requestPermission();
                    }
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }));
        this.add(new Button(new Command("initialize")
        {
            @Override
            public void actionPerformed(ActionEvent evt)
            {
                try {
                    bt.initialize(true, false, "bluetoothleplugin");
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        }));

        Button bttest = new Button("DISPLAY READER");
        bttest.addActionListener(new ActionListener() 
        {
            public void actionPerformed(ActionEvent ev) 
            {
                DeleteUI();
                StringTokenizer st = new StringTokenizer(frn.infoDevices());
                while (st.hasMoreTokens()) {
                    MultiButton mb = new MultiButton(st.nextToken());
                    mb.addActionListener(new ActionListener() {
                        public void actionPerformed(ActionEvent ev) {
                            devicesCnt.add(new SpanLabel(frn.readerStatus( mb.getTextLine1())));
                        }});
                    devicesCnt.add(mb);
                }
            }
        });
        this.add(bttest);
        devicesCnt = new Container(new BoxLayout(BoxLayout.Y_AXIS));
        devicesCnt.setScrollableY(true);
        this.add(devicesCnt);
        this.show();
}

    private void DeleteUI()
    {
        devicesCnt.removeAll();
        devicesCnt.revalidate();
    }
    @Override
    public String getLogName() 
    {
        // TODO Auto-generated method stub
        return null;
    }

    public static void showDialog(String txt)
    {
        //Display.getInstance().callSerially(()->
        //{
            devicesCnt.add(new SpanLabel(txt));
            devicesCnt.forceRevalidate();
        //});
    }

}

0 个答案:

没有答案