bounty将在6天后过期。回答此问题可获得+50声望奖励。kbessemer希望引起更多人对此问题的关注:我需要知道如何检测用户何时拒绝了我的应用扫描和连接BLE设备所需的权限,这是一个Flutter应用,目前使用flutter_blue_plus和permission_handler
我正在使用www.example.com上提供的flutter_blue_pluspub.dev和permissions_handler来向用户请求所需的权限。
在Android上,我看到一个PlatformException错误,代码为“no_permissions”......但在iOS上,我没有看到这个错误,而是每次第一次启动应用程序时都会收到这个错误:
[CoreBluetooth] API误用:〈CBCentralManager:0x 283 e7 f160〉只能在通电状态下接受此命令
为了处理这个错误,我只是再次请求扫描。为什么会发生这个错误?
我如何检测到用户拒绝了我的蓝牙功能所需的权限?
我尝试过的事情:
void RequestPermission() async {
PermissionStatus locationPermission = await Permission.location.request();
PermissionStatus bleScan = await Permission.bluetoothScan.request();
PermissionStatus bleConnect = await Permission.bluetoothConnect.request();
if (locationPermission.isDenied || locationPermission.isPermanentlyDenied || bleScan.isDenied || bleScan.isPermanentlyDenied || bleConnect.isDenied || bleConnect.isPermanentlyDenied) {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => BluetoothDisabledView()
)
);
}
}
上面的代码在iOS上一直将用户发送到BluetoothDisabledView,而没有向用户呈现任何对话/权限请求。我正在使用此包获取权限:https://pub.dev/packages/permission_handler
我应该在iOS上查找什么来检测我们是否具有所需的权限?
1条答案
按热度按时间wgx48brx1#
如果用户拒绝了Flutter应用在iOS上扫描和连接BLE设备所需的权限,您可以使用
permission_handler
包。基本上,您可以使用Permission类的check方法检查location
和bluetoothPeripheral
权限的状态。因此,如果状态为
denied
或permanentlyDenied
,则可以假定用户已拒绝权限并采取适当的操作,例如显示消息或将其重定向到设置页面。关于您在iOS上遇到的“API误用”错误,如果您在蓝牙子系统完全打开之前尝试访问蓝牙功能,则可能会发生此错误。
因此,为了避免这个错误,您可以在执行任何操作之前使用
FlutterBlue
示例的state
属性来检查用户的蓝牙是否通电。如下图所示: