2,uniapp功能之—扫码(条形码,二维码)点击扫码或者pda侧边按钮扫码

本文介绍了一个用于uniapp项目的扫码组件封装方法,通过创建独立的ScanCode.vue组件避免与NFC功能冲突,并提供了详细的实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在搞uniapp的项目,所以最近的文章基本上是关于uniapp的。
分享一个自动生成二维码的网址,点击前往
注意 如果扫码和上一个nfc功能在同一个页面里面,会发生冲突,只有一个有用,一个没有用,所有,我给扫码的分装成了一个组件,这样就不会冲突了。
1,在component里面新建一个ScanCode.vue组件

<template>
	<view class="Big">
		<view id="page">
			<text v-if="isKeshi"  class="nameSty">扫描二维码获取</text>
			<text v-if="!isKeshi" class="nameSty">{{codes}}</text>
		</view>
	</view>
</template>

<script>
	var main, receiver, filter;
	var _codeQueryTag = false;
	export default {
		name:"nfc",
		data() {
			return {
				codes:'',//code
				isKeshi:true,//提示字显影
				nameStys:false,//动态样式
			};
		},
		created(option) {
			this.initScan();
			this.startScan();
		},
		onHide() {
			this.stopScan();
		},
		destroyed() {
			this.stopScan();
		},
		methods:{
			initScan() {
				let _this = this;
				main = plus.android.runtimeMainActivity(); //获取activity
				let IntentFilter1 = plus.android.importClass('android.content.IntentFilter');
				filter = new IntentFilter1();
				filter.addAction("com.seuic.scan"); // 换你的广播动作  
				receiver = plus.android.implements('io.dcloud.feature.internal.reflect.BroadcastReceiver', {
					onReceive: function(context, intent) {
						plus.android.importClass(intent);
						let code = intent.getStringExtra("scannerdata"); // 换你的广播标签  
						_this.codes = code;
						_this.queryCode(code);
						//传值,去除换行字符
						_this.$emit("setData",code.replace(/\n/g,""));
						_this.isKeshi = false;
					}
				});
			},
			startScan() {
				main.registerReceiver(receiver, filter);
			},
			stopScan() {
				main.unregisterReceiver(receiver);
			},
			queryCode(code) {
				//防重复  
				if (_codeQueryTag) return false;
				_codeQueryTag = true;
				setTimeout(function() {
					_codeQueryTag = false;
				}, 150);
				let id = code
			},
			// 点击扫码,或者直接用pda侧边的扫码按钮扫码都可以实现
			ScanCode() {
				let main1 = plus.android.runtimeMainActivity(); //获取acitivity
				let Intent = plus.android.importClass("android.content.Intent");
				let intent2 = new Intent("com.scan.onStartScan");
				main1.sendBroadcast(intent2);
			},
		},
	}
</script>

<style>
.Big{
	width: 220px;
}
.nameSty{
	height: 30px;
	width: 220px !important;
	line-height: 30px;
	font-size: 18px;
	font-weight: bold;
	color: #828282 !important;
}

/deep/.u-size-default,/deep/.uni-input-input{
	font-size: 18px;
}
</style>

2,在需要的页面引入

<template>
	<view class="box">
		<scanCode @setData="getData"></scanCode>
	</view>
</template>
<script>
import scanCode from "../../components/saoma.vue";
	export default {
		components: {
			scanCode
		},
		methods: {
			// 接收扫码的值
			getData(res){
				console.log(res)
			},
		}
	}
</script>
	

没了,结束了,是不是很简单呐,如有问题,欢迎留言。
最后:如果此篇博文对您有帮助,还请动动小手点点关注点点赞呐~,谢谢 ~ ~

{"success":true,"code":"200","message":"\u64cd\u4f5c\u6210\u529f","data":[{"OrderId":"15426","DXFName":"NC80\u5916\u6846\u6599","BarCad":"https:\/\/wincc.oss-cn-qingdao.aliyuncs.com\/Wincc_luopusijin\/material\/profile\/image\/barCad_82a9ff83-dd30-4085-b33f-9546fbebe47a.png","BarName":"NC80\u5916\u6846\u6599","BarColor":"\u5916\u5496\u5561\/\u5185\u8910\u8272","BarCode":"NC8020","BarLength":"6000","BarThick":"2","BarCount":"2","BaDatum":2.6,"ResultId":"875982","BarWidth":30,"BarHeight":40,"Bar":[{"BarName":"NC80\u5916\u6846\u5927\u9762\u5b50\u6599","BarNumber":1,"BarType":"A","BarWidth":40,"BarHeight":50,"BarMouth":18},{"BarName":"NC80\u5916\u6846\u5c0f\u9762\u5b50\u6599","BarNumber":2,"BarType":"B","BarWidth":46,"BarHeight":80,"BarMouth":10},{"BarName":"\u9694\u70ed\u676124I","BarNumber":3,"BarType":"O","BarWidth":12,"BarHeight":12,"BarMouth":10}]},{"OrderId":"15426","DXFName":"NC80\u4e2d\u6883\u6599","BarCad":"https:\/\/wincc.oss-cn-qingdao.aliyuncs.com\/Wincc_luopusijin\/material\/profile\/image\/barCad_cf2449bc-3c24-4dde-8c55-30cfaa3ba145.png","BarName":"NC80\u4e2d\u6883\u6599","BarColor":"\u5916\u5496\u5561\/\u5185\u8910\u8272","BarCode":"NC8008","BarLength":"6000","BarThick":"0","BarCount":"1","BaDatum":2.6,"ResultId":"875984","BarWidth":60,"BarHeight":50,"Bar":[{"BarName":"\u5b50\u4ef6","BarNumber":1,"BarType":"A","BarWidth":0,"BarHeight":0,"BarMouth":0},{"BarName":"\u5b50\u4ef6","BarNumber":2,"BarType":"B","BarWidth":0,"BarHeight":0,"BarMouth":0},{"BarName":"\u9694\u70ed\u676124C","BarNumber":3,"BarType":"O","BarWidth":0,"BarHeight":0,"BarMouth":0}]},{"OrderId":"15426","DXFName":"\u5916\u5f00\u5185\u6247\u6599","BarCad":null,"BarName":"\u5916\u5f00\u5185\u6247\u6599","BarColor":"\u5916\u5496\u5561\/\u5185\u8910\u8272","BarCode":"OD8004","BarLength":"6000","BarThick":"0","BarCount":"2","BaDatum":2.6,"ResultId":"875985","BarWidth":45,"BarHeight":55,"Bar":[{"BarName":"\u5b50\u4ef6","BarNumber":1,"BarType":"B","BarWidth":0,"BarHeight":0,"BarMouth":0},{"BarName":"\u5b50\u4ef6","BarNumber":2,"BarType":"B","BarWidth":0,"BarHeight":0,"BarMouth":0}]}]}能生成二维码
05-15
### JSON 数据生成二维码的技术实现 通过提供的引用内容以及相关技术背景,可以确认基于 JSON 数据生成二维码是一项常见的需求。以下是关于此主题的具体说明和技术实现方法。 #### 技术原理概述 二维码是一种二维条形式的数据存储方式,能够编多种类型的信息,包括纯文本、URL 和结构化数据(如 JSON)。要将 JSON 数据转换为二维码,通常需要以下几个步骤: 1. **准备 JSON 数据**:确保输入的 JSON 数据格式正确且易于解析。 2. **选择合适的库或工具**:使用支持二维码生成的第三方库来完成实际操作。 3. **设置输出参数**:定义二维码保存路径、文件名以及其他样式选项(如颜色、大小等)。 4. **执行生成逻辑**:调用相应的方法或函数以生成最终的二维码图像并保存至指定位置。 这些过程可以通过不同编程语言中的专用库轻松实现,在 Python 中有 `qrcode` 库[^1],而在 Java 环境下则可能涉及自定义类或者引入外部依赖项,比如引用提到的一个静态方法用于处理字符串到图片对象转化的例子[^2]。 #### 使用 Python 的具体实现方案 对于希望采用 Python 来达成目标的情况来说,“qrcode” 是一个非常流行的选择之一。下面展示了一段简单的脚本用来演示如何把给定 json 字符串转化为可视化的 qr code 文件: ```python import qrcode import json def generate_qr_from_json(json_data, file_path="output.png"): try: # 将字典类型的json数据序列化成标准格式的str serialized_json = json.dumps(json_data) # 初始化QRCode实例 qr = qrcode.QRCode( version=1, error_correction=qrcode.constants.ERROR_CORRECT_L, box_size=10, border=4, ) # 添加数据进去qr instance里头 qr.add_data(serialized_json) qr.make(fit=True) img = qr.make_image(fill_color="black", back_color="white") # 存储产生的image object 到本地磁盘上的特定目录底下 img.save(file_path) return True except Exception as e: print(e) return False if __name__ == "__main__": sample_dict = {"key": "value"} success = generate_qr_from_json(sample_dict,"./sample_output.png") if not success: raise RuntimeError('Failed to create QR Code.') ``` 以上代片段展示了完整的流程,从加载原始数据直至创建物理副本为止。值得注意的是错误捕捉机制被嵌入其中以便更好地管理潜在异常状况的发生概率。 #### UniApp 平台下的解决方案 如果开发环境位于前端框架 uni-app 上,则还可以考虑借助 JavaScript 插件 Qrcode.js 完成相似功能。这种方法特别适合移动应用项目中集成描识别与动态生产能力的需求场景描述如下所示[^3]: - 配置好 HBuilderX 开发者工具之后按照官方文档指引安装必要组件; - 编写 HTML 页面布局配合 CSS 样式调整显示效果; - 调用 API 函数传参构建专属图形资源; 尽管如此,由于平台差异性较大,某些细节部分仍需参照各自手册深入研究后再做决定。 ---
评论 41
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨同学*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值