iData品牌pda扫描开发

前言

在很多的业务场景中会涉及到二维码扫描的问题,而pda专注于扫描的移动设备,不同的pda品牌会有不同的扫描调用方法,今天我们就来讲讲iData品牌下怎么获取扫描结果。

今天涉及的内容有:

  1. iData pda 获取扫描结果的方式
  2. 扫描封装类 IDataScan介绍
  3. 扫描在 MainActivity 中的使用
  4. ScannerInterface 源码
  5. 效果图和项目结构图

先看下效果图吧


pk.gif

一. iData pda 获取扫描结果的方式

经过多种pda的兼容以后,获取pda扫描结果的方式大致分为两种,一种是通过厂家那边给的jar包进行代码集成获取,而另一种方式则是通过广播的方式获取扫描结果,今天要讲的iDta PDA 即是通过广播的方式获取扫描结果。

二. 扫描封装类 IDataScan介绍

IDataScan主要是封装了一个广播的接收类,用于接收扫描的数据,其中主要涉及到几个外部调用需要用到的方法:

//初始化,在listener接口中接收扫描返回值
void initScan(Context context,OnScanListener listener)
//扫描结束后,注销扫描相关的广播
void destroy()

IDataScan全部代码如下:

package com.example.function;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import com.util.LogUtil;

/**
 * Description:
 * <p>
 * Author:pei
 * Date: 2019/8/23
 */
public class IDataScan {

    private static final String RES_ACTION = "android.intent.action.SCANRESULT";
    private ScannerInterface mScannerInterface;
    private Context mContext;
    private OnScanListener mOnScanListener;

    //注册广播接受者
    private BroadcastReceiver mScanReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action=intent.getAction();
            //注意Extral为"value"
            String scanResult = intent.getStringExtra("value");
            if(RES_ACTION.equals(RES_ACTION)){
                if(scanResult.length()>0){
                    //如果条码长度>0,解码成功,否则失败
                   if(mOnScanListener!=null){
                       mOnScanListener.scanSuccess(scanResult);
                   }
                }else{//解码失败
                    mOnScanListener.scanFailed("解码失败");
                }
            }
        }
    };

    public void initScan(Context context,OnScanListener listener){
        this.mContext=context;
        this.mOnScanListener=listener;
        mScannerInterface = new ScannerInterface(context);
        //设置扫描结果的输出模式
        mScannerInterface.setOutputMode(1);
        IntentFilter filter=new IntentFilter();
        filter.addAction(RES_ACTION);
        context.registerReceiver(mScanReceiver, filter);
    }

    public void destroy(){
        LogUtil.i("=======注销idata品牌pda广播=========");
        if(mScanReceiver!=null&&mContext!=null) {
            mContext.unregisterReceiver(mScanReceiver);
        }
    }

    public interface OnScanListener{
        void scanSuccess(String code);
        void scanFailed(String message);
    }
}

三. 扫描在 MainActivity 中的使用

在MainActivity中使用扫描的时候,先要初始化 IDataScan 类

mIDataScan=new IDataScan();

然后,调用IDataScan 的init方法,用于注册扫描广播并接收扫描结果返回值

        mIDataScan.initScan(this, new IDataScan.OnScanListener() {
            @Override
            public void scanSuccess(String code) {
                //解码成功
                LogUtil.i("=======解码成功==gg===="+code);
            }

            @Override
            public void scanFailed(String message) {
                //解码失败
                LogUtil.i("=======解码失败==gg===="+message);
            }
        });

当界面要退出的时候,注销扫描广播

        if (mIDataScan!=null){
            mIDataScan.destroy();
        }

下面贴出MainActivity代码:

package com.example.testdemo;

import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.example.function.IDataScan;
import com.util.LogUtil;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private TextView mTvText;
    private IDataScan mIDataScan;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        initData();
        setListener();
    }

    private void initData() {
        mTvText = findViewById(R.id.tv_text);
        mTvText.setText("扫描结果:");

        initScan();
    }

    private void initScan(){
        mIDataScan=new IDataScan();

        mIDataScan.initScan(this, new IDataScan.OnScanListener() {
            @Override
            public void scanSuccess(String code) {
                //解码成功
                LogUtil.i("=======解码成功==gg===="+code);
                mTvText.setText("扫描结果:"+code);
            }

            @Override
            public void scanFailed(String message) {
                //解码失败
                LogUtil.i("=======解码失败==gg===="+message);
                mTvText.setText("扫描失败");
            }
        });
    }

    private void setListener() {

    }

    @Override
    public void onClick(View v) {


    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (mIDataScan!=null){
            mIDataScan.destroy();
        }
    }
}

四.ScannerInterface 源码

还有 70% 的精彩内容
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
支付 ¥2.00 继续阅读

推荐阅读更多精彩内容

  • 前言 在android开发过程中,我们经常会涉及到扫描的问题,但是对于一些要求度比较高的情景的话,手机自带的摄像头...
    奔跑的佩恩阅读 4,357评论 0 0
  • 前言 这段时间,公司一直在挑用不同的pda,于是各种扫描调用学习起来,之前,用的优博讯的pda并没有提供相关开发文...
    奔跑的佩恩阅读 4,549评论 0 1
  • 前言 在PDA开发的过程中,一般你选择固定品牌的PDA后会有他们对应的开发包,但也不排除有的pda没有提供开发文档...
    奔跑的佩恩阅读 3,414评论 0 0
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,144评论 1 32
  • 本人初学Android,最近做了一个实现安卓简单音乐播放功能的播放器,收获不少,于是便记录下来自己的思路与知识总结...
    落日柳风阅读 19,232评论 2 41