黄Adai
黄Adai
  • 发布:2023-02-01 09:41
  • 更新:2023-06-14 14:44
  • 阅读:2757

【报Bug】华为鸿蒙3.0系统 链接不了蓝牙打印机,鸿蒙2.0没有问题

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号: win10

HBuilderX类型: 正式

HBuilderX版本号: 3.7.0

手机系统: Android

手机系统版本号: Android 11

手机厂商: 华为

手机机型: 鸿蒙3.0系统

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

其他机型没有问题,就是鸿蒙3.0

预期结果:

希望官方进行测试打印链接,

实际结果:

现在不能打印链接蓝牙,也就不能打印了

bug描述:

给客户的APP程序 ,本来使用是没有问题的,华为发布了鸿蒙3.0之后 他们的手机自动升级到3.0后就链接不了蓝牙打印机了。在app内进行打印的时候,不弹出已经配对的蓝牙列表,导致app无法打印

2023-02-01 09:41 负责人:无 分享
已邀请:
118

118

我做过蓝牙打印的项目,热敏机,针式打印机都适配过。
你遇到的问题,有两种情况。
第一有些机型搜索不到打印机是由于系统的限制,必需在系统设置里先进行蓝牙配对,你的APP才能搜索到并进行连接,但大部分的机型是不需要的。
另外一种情况就是蓝牙版本的问题,有些打印机不支持BLE,仅支持经典蓝牙,而uniapp提供的蓝牙只支持BLE ,所以搜不到打印机很正常。
这不是BUG,就是这样设计的。
如何解决这问题?
我是自己开发的原生插件,使用android系统的蓝牙打印接口实现。
对比uniapp提供的有很优点,什么样的蓝牙打印机都能链接,并且打印速度,连接速度都很快。并且数据量大时打印也不会中断。

  • 黄Adai (作者)

    我们的蓝牙打印也是在系统设置内先配对好,然后在app内需要打印的地方会显示已配对的蓝牙列表,点击进行打印,但是客户升级到鸿蒙3.0 就不行了,app内就不显示配对好的列表了,导致app不能打印

    2023-02-01 11:13

  • 118

    回复 黄Adai: 那你只能用原生插件的方式来解决了,我只所以搞原生打印也是因为经常有客户反应,搜不到打印机,或者连接不上, uniapp提供的BLE方案确实兼容性不行,自从使用原生后就在无这种问题了。

    2023-02-01 11:27

黄Adai

黄Adai (作者)

经过测试


获取已经匹配的蓝牙列表获取为空 ,

118

118

我记得升级系统后需要重新绑定配对。你让客户重新配对看看

  • 黄Adai (作者)

    方法都试过了,看下官方能不能解决不,不行的话 ,只能去学习搞个原生的插件了

    2023-02-03 09:27

118

118

我咨询了我的客户他们有使用鸿蒙3.0 机型是华为nova,使用ble能够正常搜索连接。

  • 黄Adai (作者)

    多谢,去学习一下Android studio去,都好久没碰了。。其实app如果和硬件交互的比较多的话 ,还是使用原生的做app比较好,

    2023-02-03 14:45

2***@qq.com

2***@qq.com

我也发现鸿蒙3.0联机调试时可以搜索到蓝牙设备,但是打包后就搜索不到了,其他机型没有这个问题

5***@qq.com

5***@qq.com

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

5***@qq.com

5***@qq.com

本问题已解决:
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

要回复问题请先登录注册