所以我有一个 POS 应用程序,可以向客户打印收据,我使用这个包来扫描蓝牙设备:https://pub.dev/packages/flutter_blue_plus
它可以在 IOS 设备上运行,但是当我切换到 Android 设备时,找不到蓝牙打印机,并且控制台上没有打印任何内容
我尝试更改 android.manifest 并添加此权限
<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" android:usesPermissionFlags="neverForLocation" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
但是问题依然存在
首先要检查的是您的应用程序在运行时是否正确请求必要的权限。某些权限必须由用户在运行时显式授予。正如 Android 开发者指南中强调的那样:
BLUETOOTH_ADVERTISE、BLUETOOTH_CONNECT 和 BLUETOOTH_SCAN 权限是运行时权限。因此,您必须明确 在您可以查找蓝牙之前,请在您的应用程序中请求用户批准 设备,使设备可被其他设备发现,或进行通信 与已配对的蓝牙设备。
如果您尚未实现运行时权限请求,您的应用程序将无法执行蓝牙扫描或连接,这可以解释为什么您的打印机被检测到。
如果您已经在代码中实现了运行时权限,那么我接下来要尝试的就是从 AndroidManifest.xml 中的 BLUETOOTH_SCAN 权限中删除 neverForLocation 标志。虽然此标志通常只影响蓝牙信标的扫描结果,但在某些情况下它可能会影响其他设备的扫描结果。它不太可能是问题的主要原因,但删除它可以帮助消除与基于位置的扫描相关的任何潜在冲突。
查看以下链接了解更多信息:-