1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > 扫码枪连接mysql教学_Android PDA扫描枪广播接搜条码并使用

扫码枪连接mysql教学_Android PDA扫描枪广播接搜条码并使用

时间:2018-12-04 10:21:13

相关推荐

扫码枪连接mysql教学_Android PDA扫描枪广播接搜条码并使用

在开发扫描枪扫码接收广播条码的时候,由于厂商如shit般的文档和对Anroid基础知识的缺失,走了一些弯路,以下是广播接收条码并使用的代码实现 :

1 : 动态注册广播

PDA扫描枪对扫码有强大支持,在原生自带的扫描服务中可以配置多种扫描模式,广播传递扫码结果是相对先进的。

首先 PAD 扫描枪在扫码解析后是会自动发送广播的,注册解析扫码结果的广播后,可以在广播类中直接获取。

再项目开发环境中,相应业务代码是写在Activity中的,目前的需求是按下扫码按键,接收广播数据并在Activity中进行相关业务实现。

在开发者模式与AndroidStudio进行调试连接后按键按键AndroidStudio的运行日志会自动打印按键的KeyCode:

D/MultiTapKeyListener: keyCode=139 mInputMode=0

最开始的想法是这么写 :

if (keyCode == 139 && event.getAction() == KeyEvent.ACTION_DOWN) {

接收数据启动业务线程

}

对扫码按键进行监听,按下后系统发送广播,广播接收器接收到扫描数据存放在静态变量中,然后在Activity中进行获取。

然而广播发送接收和Activity代码执行时异步的,Activity中获取的扫码结果为null,而广播接收器则可以接收数据。

2 : 使用接口回调

package he3.sd.adapter;

import android.content.BroadcastReceiver;

import android.content.Context;

import android.content.Intent;

import android.util.Log;

import android.widget.EditText;

import android.widget.Toast;

import he3.sd.util.Base;

import he3.sd.util.Utility;

/**

* Created by asd25 on /7/20 0020.

*/

public class ScanCodeBroadcastReceiver extends BroadcastReceiver {

private EditText editText;

private OnReceiveCode onReceive;

private String TAG = "ONR";

@Override

public void onReceive (Context context, Intent intent){

Base.barCode = intent.getStringExtra("Scan_context");

editText.setText(Base.barCode);

Base.op = Utility.getBarCodeType(Base.barCode);

editText.clearFocus();

editText.setText("");

onReceive.notifynThread(Base.barCode);

}

interface OnReceiveCode{

void notifynThread(String Code);

}

public void setOnReceive(OnReceiveCode onReceive,EditText editText) {

this.onReceive = onReceive;

this.editText = editText;

}

}

在广播接收器中定义接口,和初始化接口的方法。

整体逻辑为: 启动拥有扫码模块的Activity之后会自动动态注册扫码广播,接着在广播类中定义回调接口,在接收模块实现方法,就可以在收到条码后执行业务代码。

在 Activity 中动态注册广播接收器,实现广播接收器定义的接口 :

public class ScanOperationAdapterPage extends AppCompatActivity implements View.OnClickListener,ScanCodeBroadcastReceiver.OnReceiveCode{

ScanCodeBroadcastReceiver setOnReceive;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_adapterlayout);

userInfo = gson.fromJson(Tools.getUserInfo(ScanOperationAdapterPage.this), User.class);

initView();

initActionBar();

initEvents();

dataReset();

initBroadcastReceiver();

/注册广播接收器

}

private void initBroadcastReceiver() {

setOnReceive = new ScanCodeBroadcastReceiver();

IntentFilter intentFilter = new IntentFilter();

intentFilter.addAction("com.android.scanservice.scancontext");

registerReceiver(setOnReceive,intentFilter);

setOnReceive.setOnReceive(this,IP);

}

@Override

public void notifynThread(String Code) {

Thread scanBarCodeThread = new Thread(new scanBarCodeServer());

scanBarCodeThread.start();

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。