PDA按键扫描功能

创建通用组件

<template>
    <view></view>
</template>

<script>
    var main, receiver, filter;
    var _codeQueryTag = false;
    export default {
        data() {
            return {
                scanCode: ''
            }
        },
        created: function(option) {
            this.initScan()
            this.startScan();
        },
        onHide: function() {
            this.stopScan();
        },
        destroyed: function() {
            this.stopScan();
        },
        methods: {
            initScan() {
                let _this = this;
                main = plus.android.runtimeMainActivity();
                var IntentFilter = plus.android.importClass('android.content.IntentFilter');
                filter = new IntentFilter();
                //下面的addAction内改为自己PDA的广播动作
                filter.addAction("android.intent.ACTION_DECODE_DATA");
                receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
                    onReceive: function(context, intent) {
                        plus.android.importClass(intent);
                        //下面的getStringExtra内改为自己PDA的广播标签
                        let code = intent.getStringExtra("barcode_string");
                        _this.queryCode(code);
                    }
                });
            },
            startScan() {
                main.registerReceiver(receiver, filter);
            },
            stopScan() {
                main.unregisterReceiver(receiver);
            },
            queryCode: function(code) {
                if (_codeQueryTag) return false;
                _codeQueryTag = true;
                setTimeout(function() {
                    _codeQueryTag = false;
                }, 150);
                uni.$emit('scan', code)
            }
        }
    }
</script>

父组件调用:(根据页面逻辑进行相应的判断)

<template>
	<view>我是index页面</view>
    <!-- 还要记得这里加上组件 -->
    <scan></scan>
</template>

<script>
	export default {
		data() {
			return {
				code: ''
			}
		},
		onShow: function() {
			let that = this
			uni.$off('scan') // 每次进来先 移除全局自定义事件监听器
			// uni.$on('scan', function(data) {
            uni.$on('scan',(data)=> {
                that.account = ''
		        //扫码成功后的回调,你可以写自己的逻辑代码在这里
				// console.log('扫码结果:', data);
				setTimeout(()=>{
					this.code = data
					console.log(that.code)
				},300)
			})
		},
		methods: {

		}
	}
</script>

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一个简单的示例代码,可以在uni-app中调用PDA扫描功能: 1. 首先,需要创建一个原生插件。在项目目录下创建一个名为 "com.example.pda" 的文件夹,创建一个名为 "PdaPlugin.java" 的文件,代码如下: ```java package com.example.pda; import android.content.Intent; import android.provider.Settings; import android.provider.Settings.SettingNotFoundException; import android.util.Log; import com.dtr.zbar.build.ZBarDecoder; import org.json.JSONException; import org.json.JSONObject; import java.util.HashMap; import io.dcloud.feature.uniapp.annotation.UniPlugin; @UniPlugin(name = "PdaPlugin") public class PdaPlugin { private static final String TAG = "PdaPlugin"; // 扫描结果回调函数 private static OnScanResultListener sListener; // 开始扫描 public void startScan(final JSONObject options, final OnScanResultListener listener) { // 保存回调函数 sListener = listener; // 打开扫描界面 Intent intent = new Intent("com.example.pda.SCAN"); intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); intent.setPackage("com.example.pda"); UniApplication.getContext().startActivity(intent); } // 扫描结果回调函数 public static void onScanResult(String result) { if (sListener != null) { sListener.onScanResult(result); } } // 扫描结果回调接口 public interface OnScanResultListener { void onScanResult(String result); } } ``` 2. 在 "AndroidManifest.xml" 文件中添加以下代码: ```xml <activity android:name=".ScanActivity" android:screenOrientation="portrait" android:theme="@android:style/Theme.NoTitleBar.Fullscreen" /> <uses-permission android:name="android.permission.CAMERA" /> <uses-feature android:name="android.hardware.camera" /> ``` 3. 创建一个名为 "ScanActivity.java" 的文件,代码如下: ```java package com.example.pda; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import com.dtr.zbar.build.ZBarDecoder; public class ScanActivity extends Activity { private static final String TAG = "ScanActivity"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 扫描结果返回 if (getIntent().getAction().equals("com.example.pda.SCAN")) { Intent intent = new Intent("com.example.pda.SCAN_RESULT"); intent.putExtra("SCAN_RESULT", ZBarDecoder.scanImage(this)); setResult(RESULT_OK, intent); finish(); } } } ``` 4. 在 uni-app 中调用插件,代码如下: ```javascript import { PdaPlugin } from '@uni-app-plus/pda-plugin'; // 开始扫描 PdaPlugin.startScan({}, { onScanResult(result) { console.log('扫描结果:', result); } }); ``` 以上代码仅作为参考,具体实现可能会因为PDA型号、系统版本等因素而有所不同,需要根据具体情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值