gitup下载的最新的QGC,android编译后,蓝牙总是搜索不到。从console看到两条Err,是permission的问题。但是这两句话程序里是查不到的,是一个没有出现在程序里的QT的permission类出了问题。但是这个类怎么用,为什么出错也是一头雾水。
从网上搜索了很多方法,各种权限设置,包括手动改手机权限,都没有用。
网上下载了一个蓝牙遥控器程序,编译后是可以搜索蓝牙设备的,但是也没发现和QGC的蓝牙部分程序有什么太大差异。
后来看QT6.6.3自带的蓝牙例程(名字大概是**heart**game),发现里面进去后有一段权限判断的程序,这段程序也是qt官网帮助文档里的,即:
#if QT_CONFIG(permissions)
QBluetoothPermission permission{};
permission.setCommunicationModes(QBluetoothPermission::Access);
switch (qApp->checkPermission(permission)) {
case Qt::PermissionStatus::Undetermined:
qApp->requestPermission(permission, this, &BluetoothConfiguration::startScan);
return;
case Qt::PermissionStatus::Denied:
//setError(tr("Bluetooth permissions not granted!"));
//setIcon(IconError);
return;
case Qt::PermissionStatus::Granted:
break; // proceed to search
}
#endif // QT_CONFIG(permissions)
这段程序会查询权限,权限不够会弹出对话框申请权限。
把这段程序添加到qgc里蓝牙扫描那个函数里,再次编译,安装。运行程序后,第一次运行会弹出申请权限的对话框(有个申请fine location权限,但是这个权限明明在AndroidManifest.xml里添加过了,搞不懂为什么),允许后就能找到蓝牙了。