在开发扫描枪扫码接收广播条码的时候,由于厂商如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 2018/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();

}

监听pda扫描_Android PDA扫描枪广播接搜条码并使用相关推荐

  1. android p wifi一直在扫描_Android Wifi 扫描及自动连接

    缘起 最近有个需求,要求App能够自动扫描到某个热点然后自动连接上热点.背景是我们公司属于IoT行业,这个热点是设备发出的,有固定的前缀(比如设备热点名为SmartLife-xx),可以直接连接无需密 ...

  2. 安卓监听手机USB接口拔插警报广播

    安卓监听手机USB接口拔插警报广播 很多场景我们都是需要监听手机拔插,手机都会自带一个广播去监听,我们手机充电,手机接入电脑的时候,一般都会有个小小的震动.在商场上,人多混杂,手机插在USB上,一旦有 ...

  3. 网络与信息安全实验总结(报文监听与分析,漏洞扫描,逆向工程,安全产品)

    本文所有相关资源打包链接(题目+软件+实现+报告):https://download.csdn.net/download/qq_39932172/11393753 4个实验Word文档: 报文监听与分 ...

  4. android 监听安装来源_Android编程监听APK安装与删除等过程的方法

    本文实例讲述了Android编程监听APK安装与删除等过程的方法.分享给大家供大家参考,具体如下: 软件下载后的一系列动作监听:先前是通过Service监听扫描获取状态,以后用这个方法测试使用 imp ...

  5. java监听网络连接_Android RxJava 之网络链接监听示范

    RxJava在stream events处理上真的是一个利器.下面的示范代码显示如何用它来监听android设备的网络连接状况,实时接收change信息. IntentFilter filter = ...

  6. 安卓开发 监听虚拟按键_Android 虚拟按键适配动态调整布局的方法

    最近项目中遇到了华为虚拟按键适配的问题,主页是个RecylerView(如下图),如果不做适配,在界面初始化完毕后,虚拟按键会遮挡页面或者空出一些留白部分,针对这个问题上网找了些资料,总结了以下方法 ...

  7. java监听短信_Android上监听收到的短信(SMS)

    Android SDK1.1 验证可行. 1.实现一个Receiver[收到的是PDU,需要从PDU中还原出SMSMessage] Java代码 public void onReceive(Conte ...

  8. Android 无法监听安装,Android关于apk安装成功广播监听

    有这样的应用场景,apk安装成功后需要重启APP,就需要监听完成安装的回调或者广播 public class UpdateReceiver extends BroadcastReceiver { pr ...

  9. android怎么监听多点触摸_Android多点触摸交互处理

    触摸操作是安卓最基本的交互方法,掌握多点触摸的开发可增强应用交互体验.首先需要了解触摸事件的侦听和传递,同时,本文介绍了单点.多点触摸的使用方法,并在此基础上,使用多点触控完成了一个缩放照片的简单例子 ...

最新文章

  1. 向窗体中拖放图片并显示
  2. Java迭代器(转)(iterator详解以及和for循环的区别)
  3. (0099)iOS开发之Xcode编译工程报错问题汇总
  4. 什么是javabean,它与java的区别是什么?(转)
  5. IMOAutocompletionViewController
  6. beautifulsoup find函数返回值_再端一碗BeautifulSoup
  7. BZOJ.1024.[SCOI2009]生日快乐(记忆化搜索)
  8. golang mysql 回调_Golang操作MySQL的正确姿势
  9. linux login 安装桌面,Linux_Ubuntu Linux下安装配置fluxbox桌面环境,安装   基本系统Ubuntu 7.10 G - phpStudy...
  10. 分享两款迷你FTP服务器
  11. [导入][转] Eclipse中的快捷键
  12. nginx配置php虚拟主机
  13. 工人退休工资偏低,为什么?
  14. 一款舒适的画图软件,支持各种文件格式的导入和导出,Edraw Max 包含中文版和英文版,也包含 Mac 版本 和 Windows 版本
  15. DL/T 645-2007多功能电表通信规约
  16. java 有向图 最短路径算法_java使用Dijkstra算法实现单源最短路径
  17. 市场模式缭乱,合适的模式脱颖而出?众筹卖货模式在线分享分析
  18. 加壳工具WinLicense使用教程,以v2.3.9.0为例
  19. Lombok最全使用详解
  20. 扩展windows2003 系统分区

热门文章

  1. 欢迎中文社区新版主@张特特
  2. 穿行测试工作底稿 软件行业,内部控制审计工作底稿之确定控制是否得到执行(穿行测试).doc...
  3. python根据经纬度确定省份_根据经纬度定位用户所在城市
  4. EF 框架的简介、发展历史;ORM框架概念
  5. 大龄青年的艰难转行IT之路
  6. 网络怎么改变计算机,怎么更改电脑上网IP地址
  7. XDOJ 字符串压缩 C
  8. 网卡上两个指示灯的作用
  9. JavaScript 发布订阅者模式和观察者模式及区别
  10. 仅需1秒!搞定100万行数据:超强Python数据分析利器!掌握了吗!