SAP UI5 在 PC 端浏览器和移动设备使用摄像头进行条形码扫描的几种解决方案介绍(一)

简介: SAP UI5 在 PC 端浏览器和移动设备使用摄像头进行条形码扫描的几种解决方案介绍

本文标题描述的这个需求,从实现思路考虑,可以拆解成两个小步骤来学习:

  1. 如何使用 JavaScript 调用本机( PC 端或者移动设备端)的摄像头;
  2. 如何在弹出的摄像头扫描窗口中,完成条形码的扫描工作。

对于第一个步骤,网络上有太多的解决方案,Jerry 本文只分享自己在项目中用过并测试通过的几种方法。

对于第二个步骤,显然我们不用重复造轮子,可以使用 SAP UI5 控件库里的 sap.ndc.BarcodeScanner 控件,操作摄像头进行条形码扫描。


本文目录

如何使用 JavaScript 调用本机( PC 端或者移动设备端)的摄像头

如何在弹出的摄像头扫描窗口中完成条形码的扫描工作

如何在桌面电脑端调试运行在手机上的 SAP UI5 应用

为什么 SAP UI5 应用运行在手机浏览器时打不开手机的摄像头

如何把 SAP UI5 打包成 Cordova 应用并添加 Barcode 插件


下面是正文。


Jerry 之前的公众号文章纯 JavaScript 实现的调用设备摄像头并拍照的功能,曾经介绍过一种基于 WebRTC API 访问本机摄像头的解决方案。WebRTC(Web Real Time Communication,网页即时通信) 是一组现代浏览器支持的 API,使得 Web 开发人员仅通过纯 JavaScript 编程,就能开发出功能丰富的实时多媒体应用,而无需学习多媒体数字信号处理的底层知识。基于 WebRTC API 的应用在运行时,无需下载任何额外的浏览器插件或扩展。


用 WebRTC API 进行本机多媒体设备检测的代码:


navigator.mediaDevices.enumerateDevices().then(gotDevices);


方法 enumerateDevices 采用异步执行的方式,枚举出本机支持的所有多媒体设备(包括摄像头),将结果传递给回调函数 gotDevices.


在调试器里查看这些枚举出的多媒体设备明细,发现和我 Windows10 操作系统里查看到的一致:

36.png

image.png

在 PC 端或手机端浏览器环境第一次执行包含上述 WebRTC API 调用的 Web 应用时,会弹出一个对话框,询问用户是否授予该应用访问摄像头和麦克风等本机多媒体设备的权限:

37.png

至于如何使用 JavaScript 将当前摄像头视野内的内容另存为一张图片,和本文主题无关,详细步骤请参考 Jerry 之前的公众号文章:纯 JavaScript 实现的调用设备摄像头并拍照的功能。

38.png

以上是 Web 应用通过 WebRTC API 调用本机摄像头的思路。有的朋友会问,如果我用

SAP UI5 开发,上面提到的这段代码,写在 SAP UI5 应用里什么位置?Component.js 还是视图控制器 controller.js 里?


具体的代码编写可以查看我这篇文章:如何在 SAP UI5 应用里添加使用摄像头拍照的功能

如何在弹出的摄像头扫描窗口中完成条形码的扫描工作

答案是使用 SAP UI5 标准控件 sap.ndc.BarcodeScannerButton.

39.png

详细的实现步骤,参考我这篇文章:


https://jerry.blog.csdn.net/article/details/123420376


按照上述文章步骤在 PC 端第一次运行 SAP UI5 应用,点击 Scan 按钮,会弹出一个对话框,询问用户是否允许该应用访问 Camera(摄像头):

image.png

选择允许之后,浏览器右上角会出现一个摄像头图标,提示用户,当前应用正在使用本机的摄像头。

同时,把包含条形码的物体表面放置摄像头之前,即可成功完成扫描。

40.png

如何在桌面电脑端调试运行在手机上的 SAP UI5 应用

有朋友反映,同样的 SAP UI5 代码,在 PC 浏览器端可以正常访问摄像头,在手机端浏览器运行,就无法打开摄像头。弹出的是一个扫描器不可用,让用户手动输入条形码的对话框。

image.png

遇到这种情况,盲目猜测无济于事。在手机上单步调试,有助于准确找到问题症结。


我使用的是 Android 手机 + Windows10 操作系统,使用 Chrome 可以方便地在 PC 端的 Chrome 开发者工具里单步调试运行在手机端的 SAP UI5 应用。


具体的调试环境配置步骤,参考我这篇文章:


https://jerry.blog.csdn.net/article/details/123433404


在 Android 手机上打开 USB 调试模式,用数据线将笔记本电脑和手机连接起来:

image.png

在 Chrome 开发者工具里找到手机上运行的 SAP UI5 应用进程,点击 inspect 即可开始调试:

41.png

调试界面如下图所示:

42.png




目录
相关文章
|
13天前
|
JavaScript 索引
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
75 0
|
6月前
|
存储 安全 测试技术
使用 Visual Studio Code 创建 SAP UI5 项目遇到 self-signed security certificate 相关问题
使用 Visual Studio Code 创建 SAP UI5 项目遇到 self-signed security certificate 相关问题
|
3月前
|
数据采集 Web App开发 测试技术
使用Selenium调试Edge浏览器的常见问题与解决方案
在互联网数据采集领域,Selenium常用于自动化网页爬取。针对使用Edge浏览器时遇到的启动远程调试失败、访问受限及代理IP设置等问题,本文提供了解决方案。通过特定命令启动Edge的远程调试模式,并利用Python脚本配合Selenium库,可实现代理IP、User-Agent的设定及Cookie管理等高级功能,有效提升爬虫稳定性和隐蔽性。遵循步骤配置后,即可顺畅执行自动化测试任务。
641 1
使用Selenium调试Edge浏览器的常见问题与解决方案
|
4月前
|
编解码 前端开发 图形学
【技术深度解析】多平台适配下的UI适配难题:U3D游戏UI错乱的终极解决方案
【7月更文第12天】随着移动设备市场的多元化,Unity游戏开发者面临的一大挑战是如何在不同分辨率和屏幕尺寸的设备上保持UI的一致性和美观性。游戏在高分辨率平板与低分辨率手机上呈现出的UI布局混乱、按钮错位等问题,严重影响玩家体验。本文旨在探讨Unity UI(UGUI)在多平台适配中的最佳实践,通过优化Canvas Scaler设置、灵活运用RectTransform和Anchor Points,以及高效利用设计工具,确保UI的完美适配。
511 1
|
4月前
|
编解码 JavaScript
【vue2】vue2 适配pc端,解决浏览器缩放问题,解决电脑显示设置缩放、分辨率问题
【vue2】vue2 适配pc端,解决浏览器缩放问题,解决电脑显示设置缩放、分辨率问题
371 1
|
4月前
element UI【解决方案】消息弹框被对话框遮挡($message消息框被dialog或$alert遮罩)
element UI【解决方案】消息弹框被对话框遮挡($message消息框被dialog或$alert遮罩)
169 3
|
4月前
|
JavaScript
element-ui 在vue中el-input输入框的autofocus属性失效【解决方案】
element-ui 在vue中el-input输入框的autofocus属性失效【解决方案】
222 1
|
4月前
|
Web App开发 编解码
软件开发常见流程之兼容性和手机屏页面设计,PC端和移动端常见浏览器,国内的UC都是根据Webkit修改过来的内核,开发重点关注尺寸,常见移动端尺寸汇总,移动端,理想视口根据你设别的样式进行修改
软件开发常见流程之兼容性和手机屏页面设计,PC端和移动端常见浏览器,国内的UC都是根据Webkit修改过来的内核,开发重点关注尺寸,常见移动端尺寸汇总,移动端,理想视口根据你设别的样式进行修改
|
4月前
|
JavaScript
vue项目中升级element ui(含常见报错及解决方案,如表格不显示,el-table无效, “__v_isRef“ is not defined,Use :deep() instead)
vue项目中升级element ui(含常见报错及解决方案,如表格不显示,el-table无效, “__v_isRef“ is not defined,Use :deep() instead)
51 0
|
4月前
Element UI 多选表格【翻页多选】全能版(含翻页多选数据反显、toggleRowSelection失效的原因解析和解决方案)
Element UI 多选表格【翻页多选】全能版(含翻页多选数据反显、toggleRowSelection失效的原因解析和解决方案)
251 0