另一种全局接收方式已更新:https://blog.csdn.net/qq_39731011/article/details/107684794 (Activity事件全局分发)

扫码盒子通用接收原理

1.本质上是键盘输入事件

2.可以响应EditText的输入事件(前提是获得焦点)

首先写接收源: (假设在MainActivity接收付款码)

<EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/edit_pay_code"android:visibility="visible"></EditText>

接收代码:

public ScanKeyManager scanKeyManager;private void initView(){EditText edt = findViewById(R.id.edit_pay_code);edt.setOnEditorActionListener(new TextView.OnEditorActionListener() {@Overridepublic boolean onEditorAction(TextView v, int actionId, KeyEvent event) {String str = v.getText().toString().trim();Log.e("付款码:", str + "");if (str.length() == 18) {//134609522362925502v.setText("");if (scanKeyManager != null)scanKeyManager.analysisKeyEvent(str);}closeKeyboard();  //事件结束后收回键盘return true;}});}private void closeKeyboard(){if(edt!=null) {InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);inputMethodManager.hideSoftInputFromWindow(edt.getWindowToken(), 0);}}public void requestEditText(){if(edt!=null){edt.setFocusable(true);edt.setFocusableInTouchMode(true);edt.requestFocus();}}
/**作者:赵星海*时间:2020/5/27 16:22*用途: 扫码盒子接收回调*/public class ScanKeyManager {public OnScanValueListener mListener;public interface OnScanValueListener {void onScanValue(String value);}public ScanKeyManager(OnScanValueListener listener) {this.mListener = listener;}public void analysisKeyEvent(String str) {mListener.onScanValue(str+"");}}

当你要开启扫码接收的时候:(假设在PopupWindow中获得付款码)

            ((MainActivity) mContext).requestEditText();Toast.makeText(mContext, "请出示付款码", Toast.LENGTH_SHORT).show();// 语音提醒SpeechUtils.getInstance(mContext).speakText("请出示付款码");((MainActivity) mContext).scanKeyManager = new ScanKeyManager(new ScanKeyManager.OnScanValueListener() {@Overridepublic void onScanValue(String value) {// Log.e("扫码结果:",""+value);// Toast.makeText(mContext,"结果"+value,Toast.LENGTH_SHORT).show();if (value == null) return;if (value.trim().substring(0, 2).equals("28")) {goPay(2, value);//1微信 2支付宝 } else {goPay(1, value);}}});

付款完成后,需要关闭接收。

((MainActivity) mContext).scanKeyManager = null;

完事,就是这么简单,需要额外注意一点:

如果是在PopupWindow中开启回调的话,由于PopupWindow盖在Activity之上,抢了Activity上EditText的焦点。

所以需要在配置PopupWindow时,要将这个配置改成false:this.setFocusable(false); 

或者注释掉这行代码,因为它默认是false。

    /*** 设置窗口的相关属性*/@SuppressLint("InlinedApi")private void setPopupWindow() {this.setContentView(mPopView);// 设置Viewthis.setWidth(LinearLayout.LayoutParams.MATCH_PARENT);// 设置弹出窗口的宽this.setHeight(LinearLayout.LayoutParams.MATCH_PARENT);// 设置弹出窗口的高// this.setFocusable(true);// 设置弹出窗口可获得焦点}
 

Android 扫码盒子全局接收付款码相关推荐

  1. 直播源代码Android 扫码盒子全局接收付款码

    1.本质上是键盘输入事件 2.可以响应EditText的输入事件(前提是获得焦点) 首先写接收源: (假设在MainActivity接收付款码) 接收代码: public ScanKeyManager ...

  2. Android 扫码盒子全局接收付款码(全局事件上层接收多重下发)

    实现MainActivity,然后接收到的内容,通过接口回调,依次下发到各个业务 还有另一种用EditText接收付款码的方式,地址:https://blog.csdn.net/qq_39731011 ...

  3. Android连扫码盒子,Android 扫码盒子全局接收付款码(全局事件上层接收多重下发)...

    实现MainActivity,然后接收到的内容,通过接口回调,依次下发到各个业务 还有另一种用EditText接收付款码的方式,地址:https://blog.csdn.net/qq_39731011 ...

  4. android 扫描二维码支付,Android 扫码盒子全局接收付款码(全局事件上层接收多重下发)...

    实现MainActivity,然后接收到的内容,通过接口回调,依次下发到各个业务 String barcode = ""; // 收到的码结果 String check = &qu ...

  5. 轻轻一扫,立刻扣款,付款码背后的原理你不想知道吗?

    来自:程序通事 前言 最近由于业务需求,需要开发付款码功能,该接口底层将会聚合市面上主流钱包 APP 的付款码功能,如微信支付,支付宝支付. ps:付款码支付别称有很多,如微信支付端支付产品为付款码支 ...

  6. OTP:Java一次动态密码、付款码原理

    1. 什么是OTP 一次性密码(One Time Password,简称OTP),又称"一次性口令",是指只能使用一次的密码. 2. OTP原理 动态密码的产生方式,主要是以时间差 ...

  7. java 动态密码错误_什么是OTP:Java一次动态密码、付款码原理

    1. 什么是OTP 一次性密码(One Time Password,简称OTP),又称"一次性口令",是指只能使用一次的密码. 1 2. OTP原理 动态密码的产生方式,主要是以时 ...

  8. 苹果+android+扫码支付,苹果iOS12捷径扫码付款怎么设置 微信支付宝扫码二合一支付捷径...

    苹果iOS12捷径扫码付款怎么设置 微信支付宝扫码二合一支付捷径.捷径是苹果手机一个比较实用的功能,如今手机扫码支付非常流行,因此在苹果手机中安装一个支付捷径,还是非常方便的.下面小编就来分享一个微信 ...

  9. Android扫一扫和生成二维码(使用华为ScanKit)

    本文主要讲如何使用华为统一扫码scan Kit进行扫一扫以及生成二维码, 有兴趣的可以看一下华为扫描和Zxing扫描的区别 使用步骤 1.在全局的build.gradle文件里添加华为maven仓库 ...

最新文章

  1. python获取机器唯一标识_开发中常用工具 - 获取设备的唯一标识、UDID、UUID、keychain保存UUID、判断网络...
  2. 两台服务器安装redis集群_Redis Cluster搭建高可用Redis服务器集群
  3. Hadoop源码导入Eclipse
  4. 伊利诺伊香槟分校计算机科学,伊利诺伊大学香槟分校计算机科学与信息系统世界排名2019年最新排名第31(QS世界排名)...
  5. 5.2jquery案例2
  6. 5款WordPress推荐文章幻灯片插件
  7. checksec未完待续~
  8. 3001.Linux维护和管理培训.实操考核A
  9. Spring xml文件配置——创建bean的三种方式及作用范围、生命周期
  10. php网页背景音乐代码,HTML5背景音乐播放器代码
  11. 如何对网站服务器进行安全防护
  12. EasyUI 中 Combobox里的onChange和onSelect事件的区别
  13. JRE解压缩后手动配置注册表
  14. 前沿科技分论坛精彩回顾 | 第二届始祖数字化可持续发展峰会
  15. (3)Android常见界面控件
  16. 科研写作——常见句式(十一)
  17. SAP UI5 应用开发教程之六十九 - 如何从 SAP UI5 Not Found 页面跳转回到正常的应用页面试读版
  18. Gatsby 学习 - 03 Gatsby 插件
  19. LwIP 协议栈移植教程
  20. Nokia 5530XM

热门文章

  1. 在Android中绘制圆角矩形图片
  2. AD7606调试笔记
  3. 数据库大量数据操作中事务优化方案
  4. 打算逃离北上广?看完这份地图大数据报告或许你有新的答案
  5. 基于Unity的C/S架构数据交互
  6. 汽车研发的五大阶段及制造的四大工艺
  7. Could not inflate Behavior subclass
  8. leetcode 1925. Count Square Sum Triples(python)
  9. 哈利波特AR游戏-巫师联盟 深度解析
  10. vue-cli4 + cordova扫描二维码