android 连接usb扫码枪

Android 平板热插拔USB扫描枪应用场景多,在有界面如EditText时,扫描枪扫描内容自动输入到编辑框了,在没有界面的情况下,怎么拿到扫描枪数据呢?

本文类似Android平台抢微信红包思路,使用强大的AccessibilityService(Google为了让Android系统更实用,为用户提供了无障碍辅助服务),但需要到系统设置->无障碍->服务 开启当前服务。

对AccessibilityService不了解的同学看看http://www.jianshu.com/p/4cd8c109cdfb

关键:标准扫描枪扫描数据会触发KEYCODE_ENTER键,感兴趣的同学可以在onKeyEvent函数里打log,看看这个扫描过程中出发的keyCode和条形码(或二维码)内容比较。


处理很简单,ScannerGunService(继承AccessibilityService),代码如下:

package com.android.accessibility;
 
import com.android.accessibility.scanergun.ScannerGun;
import com.android.accessibility.scanergun.ScannerGun.ScannerGunCallBack;
 
import android.accessibilityservice.AccessibilityService;
import android.content.Intent;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.accessibility.AccessibilityEvent;
import android.widget.Toast;
 
public class ScannerGunService extends AccessibilityService {
 
    final static String TAG = "ScannerGunService";
    private ScannerGun mScannerGun = null;
 
    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;
    }
 
    @Override
    public void onAccessibilityEvent(AccessibilityEvent arg0) {
        // TODO Auto-generated method stub
 
    }
 
    @Override
    public void onInterrupt() {
        // TODO Auto-generated method stub
 
    }
 
    @Override
    protected boolean onKeyEvent(KeyEvent event) {
        // TODO Auto-generated method stub
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            int keyCode = event.getKeyCode();
            if (keyCode <= 6) {
                return false;
            }
            if (mScannerGun.isMaybeScanning(keyCode, event)) {
                return true;
            }
        }
        return super.onKeyEvent(event);
    }
 
    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        mScannerGun = new ScannerGun(new ScannerGunCallBack() {
 
            @Override
            public void onScanFinish(String scanResult) {
                // TODO Auto-generated method stub
                if (!TextUtils.isEmpty(scanResult)) {
                    Toast.makeText(ScannerGunService.this.getBaseContext(),
                            "无界面监听扫描枪数据:" + scanResult, Toast.LENGTH_SHORT)
                            .show();
                }
            }
        });
        mScannerGun.setMaxKeysInterval(50);
        super.onCreate();
    }
 
}
android 连接usb扫码枪_第1张图片

你可能感兴趣的:(Android,android)