हम एंड्रॉइड एप्लिकेशन में एकीकृत करने के लिए प्रतीक ls4278 ब्लूटूथ स्कैनर का उपयोग कर रहे हैं। यह कीबोर्ड के रूप में जुड़ा हुआ है और किसी भी संपादन टेक्स्ट फ़ील्ड में स्कैन किए गए बारकोड को टाइप करता है... स्कैनर के बाद ऑनकीअप इवेंट कहा जाता है।

 public override bool OnKeyUp(Keycode keyCode, KeyEvent e)
        {
        ..
    }

मैं प्रलेखन और एंड्रॉइड एसडीके खोज रहा था, लेकिन मुझे ऐसा कोई नहीं मिला। लेकिन LI4278 के लिए उनके पास यहां android sdk है: https://www.zebra.com/us/en/support-downloads/scanners/general-purpose-scanners/li4278.html यहाँ sdk के लिए दस्तावेज़ीकरण भी है लेकिन LS4278 समर्थित डिवाइस सूची में नहीं है।

क्या किसी ने Android उपकरणों में LS4278 स्कैनर लागू किया है?

1
Nininea 16 अगस्त 2017, 17:08

3 जवाब

सबसे बढ़िया उत्तर

LS4278 उत्पाद पृष्ठ यहाँ है: https ://www.zebra.com/us/en/support-downloads/scanners/general-purpose-scanners/ls4278.html और केवल "Windows Scanner SDK" के लिए समर्थन को सूचीबद्ध करता है। LS4278 को 24 सितंबर 2012 को बंद कर दिया गया था, इसलिए मुझे आश्चर्य नहीं है कि इसमें Android समर्थन नहीं है। जैसा कि आप कहते हैं, इसके उत्तराधिकारी, LI4278 में Android समर्थन है। जैसा कि दूसरे उत्तर में कहा गया है, यदि आप डेटा प्राप्त करने के तरीके पर अधिक नियंत्रण चाहते हैं तो मेरा सुझाव है कि यदि स्कैनर इसका समर्थन करता है तो एसपीपी की कोशिश करें।

1
Darryn Campbell 17 अगस्त 2017, 09:41

अगर यह ब्लूटूथ कीबोर्ड की तरह काम करता है, तो किसी सपोर्ट की जरूरत नहीं है। बस मुख्य घटनाओं को कैप्चर करें, और एंटर दबाए जाने पर डेटा पर प्रतिक्रिया दें। यह सिर्फ एक औसत दर्जे का अनुभव है और स्क्रीन कीबोर्ड के साथ खिलवाड़ कर सकता है और उन्हें वास्तविक ब्लूटूथ कीबोर्ड का उपयोग करने से रोक सकता है। यदि स्कैनर एसपीपी का समर्थन करता है, तो आप ब्लूटूथ सीरियल के माध्यम से स्कैन डेटा को बहुत ही कम पार्स कर सकते हैं (मैंने इसे लगभग 2 सप्ताह पहले किया था)।

1
Gabe Sechan 16 अगस्त 2017, 18:21
    BluetoothAdapter bta = BluetoothAdapter.getDefaultAdapter();
    if(bta != null) {
        Set<BluetoothDevice> devices = bta.getBondedDevices();
        for (final BluetoothDevice device : devices) {
            BluetoothClass btClass = device.getBluetoothClass();
            if (btClass.getMajorDeviceClass() == 0x1f00) {
                //Only look at devices which are considered uncategorized, so we don't screw up any bt headset, leyboard, mouse, etc
                new DeviceThread(device).start();
            }
        }
        IntentFilter filter = new IntentFilter();
        filter.addAction(BluetoothDevice.ACTION_BOND_STATE_CHANGED);
        registerReceiver(new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
                int state = intent.getIntExtra(BluetoothDevice.EXTRA_BOND_STATE, BluetoothDevice.BOND_NONE);
                if (state == BluetoothDevice.BOND_BONDED) {
                    new DeviceThread(device).start();
                } else if (state == BluetoothDevice.BOND_NONE) {
                    DeviceThread thread = threadMap.get(device.getAddress());
                    if (thread != null) {
                        thread.interrupt();
                    }
                }
            }
        }, filter);
    }


private class DeviceThread extends Thread {
    private BluetoothDevice device;

    public DeviceThread(BluetoothDevice device) {
        this.device = device;
        threadMap.put(device.getAddress(), this);
    }

    @Override
    public void run() {
        try {
            BluetoothSocket socket = device.createInsecureRfcommSocketToServiceRecord(UUID.fromString("00001101-0000-1000-8000-00805F9B34FB"));
            socket.connect();
            InputStream inputStream = socket.getInputStream();

            while (!Thread.interrupted() && socket.isConnected()) {
                inputStream.skip(5);
                String data = "";
                do {
                    int code = inputStream.read();
                    char character = (char) code;
                    data = data + character;
                } while (inputStream.available() > 0);
                data = data.substring(0, data.length() - 2);

                if (scannerEventListener != null) {

                    scannerEventListener.onScan(data);
                }
            }
        } catch (IOException ex) {
            ex.printStackTrace();
        }
        Log.d("GABE", "Exiting thread");
    }
}

यह कोड जोड़े जाने वाले ब्लूटूथ डिवाइस के लिए पंजीकृत होगा, फिर जांचें और देखें कि क्या वे अज्ञात डिवाइस प्रकार हैं (स्कैनर के पास डिवाइस क्लास नहीं है)। अगर ऐसा है, तो यह उस डिवाइस को सुनने के लिए एक थ्रेड शुरू करेगा। जब यह असंबद्ध होता है, तो यह उस धागे को बाधित कर देगा। थ्रेड पर यह डिवाइस के लिए एक एसपीपी कनेक्शन खोलता है और इनपुट की प्रतीक्षा करता है। जब यह इसे प्राप्त करता है, तो यह इनपुट को पार्स करता है और परिणाम को श्रोता को भेजता है।

इसके लिए काम करने के लिए, स्कैनर को एसपीपी मोड में होना चाहिए। कुछ स्कैनर इसका समर्थन करते हैं, कुछ नहीं करते हैं, और इसे उस मोड में कैसे सेट किया जाए, यह भिन्न होता है (मेरे डेस्क पर एक नियंत्रण बारकोड होता है जिसे मुझे मोड सेट करने के लिए स्कैन करने की आवश्यकता होती है)। आम तौर पर मैं इसके लिए किसी भी प्रकार के इनपुट- हार्डवेयर कीबोर्ड मोड या एसपीपी को स्वीकार करने के लिए कोड करूंगा।

1
Gabe Sechan 17 अगस्त 2017, 17:21