其他机型没有问题,就是鸿蒙3.0
- 发布:2023-02-01 09:41
- 更新:2023-06-14 14:44
- 阅读:2757
产品分类: uniapp/App
PC开发环境操作系统: Windows
PC开发环境操作系统版本号: win10
HBuilderX类型: 正式
HBuilderX版本号: 3.7.0
手机系统: Android
手机系统版本号: Android 11
手机厂商: 华为
手机机型: 鸿蒙3.0系统
页面类型: vue
vue版本: vue2
打包方式: 云端
项目创建方式: HBuilderX
操作步骤:
预期结果:
希望官方进行测试打印链接,
希望官方进行测试打印链接,
实际结果:
现在不能打印链接蓝牙,也就不能打印了
现在不能打印链接蓝牙,也就不能打印了
bug描述:
给客户的APP程序 ,本来使用是没有问题的,华为发布了鸿蒙3.0之后 他们的手机自动升级到3.0后就链接不了蓝牙打印机了。在app内进行打印的时候,不弹出已经配对的蓝牙列表,导致app无法打印
我做过蓝牙打印的项目,热敏机,针式打印机都适配过。
你遇到的问题,有两种情况。
第一有些机型搜索不到打印机是由于系统的限制,必需在系统设置里先进行蓝牙配对,你的APP才能搜索到并进行连接,但大部分的机型是不需要的。
另外一种情况就是蓝牙版本的问题,有些打印机不支持BLE,仅支持经典蓝牙,而uniapp提供的蓝牙只支持BLE ,所以搜不到打印机很正常。
这不是BUG,就是这样设计的。
如何解决这问题?
我是自己开发的原生插件,使用android系统的蓝牙打印接口实现。
对比uniapp提供的有很优点,什么样的蓝牙打印机都能链接,并且打印速度,连接速度都很快。并且数据量大时打印也不会中断。
Hbuilder 3.2.16这个老版本在鸿蒙3上,下面代码获得的list是有值的,就是说能获得绑定设备清单。
但升级到3.7.11后就是null可。但在鸿蒙2上两个版本否正常。
感觉是3.7.11及以上版本得bug
这个bug已经很严重了,请看看吧,因为云打包最低只能打包3.7.77的了。所以现在已经用不了3.2.16了。
var main = plus.android.runtimeMainActivity();
var Context = plus.android.importClass("android.content.Context");
var BManager = main.getSystemService(Context.BLUETOOTH_SERVICE);
plus.android.importClass(BManager); //引入相关的method函数
var BAdapter = BManager.getAdapter();
plus.android.importClass(BAdapter);
var lists = BAdapter.getBondedDevices();
plus.android.importClass(lists);
这个list
本问题已解决:
1.手工解决: 鸿蒙3 中,在应用的权限中,【附近设备】默认是 “允许”,手工改成“禁止”,再手工改成“允许”,即可。
默认允许应该是没起作用。新版安卓,鸿蒙都有此问题。
2.(未尝试过):可以 在hbuilder的打包时,勾选权限的文件,选文本模式,直接加入
<!--Android12 的蓝牙权限 如果您的应用查找蓝牙设备(如蓝牙低功耗 (BLE) 外围设备)-->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" tools:targetApi="31" />
参考: https://ask.dcloud.net.cn/question/146985
黄Adai (作者)
我们的蓝牙打印也是在系统设置内先配对好,然后在app内需要打印的地方会显示已配对的蓝牙列表,点击进行打印,但是客户升级到鸿蒙3.0 就不行了,app内就不显示配对好的列表了,导致app不能打印
2023-02-01 11:13
118
回复 黄Adai: 那你只能用原生插件的方式来解决了,我只所以搞原生打印也是因为经常有客户反应,搜不到打印机,或者连接不上, uniapp提供的BLE方案确实兼容性不行,自从使用原生后就在无这种问题了。
2023-02-01 11:27