android: Update permissions for searching bluetooth devices
This commit is contained in:
parent
871e2c0ce8
commit
0f8c2a879e
@ -90,6 +90,25 @@ PlatformPermissions::PermissionStatus PlatformPermissionsAndroid::checkPermissio
|
|||||||
status = PermissionStatusNotDetermined;
|
status = PermissionStatusNotDetermined;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Some Android/Qt stacks still gate BLE scans on location permission; ensure it is present alongside bluetooth.
|
||||||
|
if (status != PermissionStatusDenied) {
|
||||||
|
QLocationPermission locationPermission;
|
||||||
|
locationPermission.setAccuracy(QLocationPermission::Precise);
|
||||||
|
const auto locationStatus = qApp->checkPermission(locationPermission);
|
||||||
|
switch (locationStatus) {
|
||||||
|
case Qt::PermissionStatus::Granted:
|
||||||
|
break;
|
||||||
|
case Qt::PermissionStatus::Denied:
|
||||||
|
qCWarning(dcPlatformPermissions()) << "Location permission denied but required for bluetooth scanning.";
|
||||||
|
status = PermissionStatusDenied;
|
||||||
|
break;
|
||||||
|
case Qt::PermissionStatus::Undetermined:
|
||||||
|
qCDebug(dcPlatformPermissions()) << "Location permission not yet requested but required for bluetooth scanning.";
|
||||||
|
status = PermissionStatusNotDetermined;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PlatformPermissions::PermissionLocalNetwork: {
|
case PlatformPermissions::PermissionLocalNetwork: {
|
||||||
@ -194,24 +213,44 @@ PlatformPermissions::PermissionStatus PlatformPermissionsAndroid::checkPermissio
|
|||||||
void PlatformPermissionsAndroid::requestPermission(PlatformPermissions::Permission platformPermission)
|
void PlatformPermissionsAndroid::requestPermission(PlatformPermissions::Permission platformPermission)
|
||||||
{
|
{
|
||||||
switch (platformPermission) {
|
switch (platformPermission) {
|
||||||
case PlatformPermissions::PermissionBluetooth:
|
case PlatformPermissions::PermissionBluetooth: {
|
||||||
qCDebug(dcPlatformPermissions()) << "Requesting bluetooth permission";
|
qCDebug(dcPlatformPermissions()) << "Requesting bluetooth permission";
|
||||||
{
|
{
|
||||||
QBluetoothPermission permission;
|
QBluetoothPermission permission;
|
||||||
permission.setCommunicationModes(QBluetoothPermission::Access);
|
permission.setCommunicationModes(QBluetoothPermission::Access);
|
||||||
qApp->requestPermission(permission, [platformPermission](const QPermission &permission) {
|
qApp->requestPermission(permission, [platformPermission](const QPermission &permission) {
|
||||||
if (permission.status() == Qt::PermissionStatus::Denied) {
|
if (permission.status() == Qt::PermissionStatus::Denied) {
|
||||||
qCWarning(dcPlatformPermissions()) << "Bluetooth permission denied.";
|
qCWarning(dcPlatformPermissions()) << "Bluetooth permission denied.";
|
||||||
s_instance->m_requestedButDeniedPermissions.append(platformPermission);
|
s_instance->m_requestedButDeniedPermissions.append(platformPermission);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (permission.status() == Qt::PermissionStatus::Granted)
|
if (permission.status() == Qt::PermissionStatus::Granted)
|
||||||
qCDebug(dcPlatformPermissions()) << "Bluetooth permission granted.";
|
qCDebug(dcPlatformPermissions()) << "Bluetooth permission granted.";
|
||||||
|
|
||||||
emit s_instance->bluetoothPermissionChanged();
|
emit s_instance->bluetoothPermissionChanged();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
QLocationPermission locationPermission;
|
||||||
|
locationPermission.setAccuracy(QLocationPermission::Precise);
|
||||||
|
const auto locationStatus = qApp->checkPermission(locationPermission);
|
||||||
|
if (locationStatus != Qt::PermissionStatus::Granted) {
|
||||||
|
qCDebug(dcPlatformPermissions()) << "Requesting location permission needed for bluetooth scanning on this Android version.";
|
||||||
|
qApp->requestPermission(locationPermission, [platformPermission](const QPermission &permission) {
|
||||||
|
if (permission.status() == Qt::PermissionStatus::Denied) {
|
||||||
|
qCWarning(dcPlatformPermissions()) << "Location permission denied.";
|
||||||
|
s_instance->m_requestedButDeniedPermissions.append(platformPermission);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (permission.status() == Qt::PermissionStatus::Granted)
|
||||||
|
qCDebug(dcPlatformPermissions()) << "Location permission granted.";
|
||||||
|
|
||||||
|
emit s_instance->locationPermissionChanged();
|
||||||
|
emit s_instance->bluetoothPermissionChanged();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
case PlatformPermissions::PermissionLocation: {
|
case PlatformPermissions::PermissionLocation: {
|
||||||
QLocationPermission locationPermission;
|
QLocationPermission locationPermission;
|
||||||
locationPermission.setAccuracy(QLocationPermission::Precise);
|
locationPermission.setAccuracy(QLocationPermission::Precise);
|
||||||
|
|||||||
@ -8,7 +8,8 @@
|
|||||||
|
|
||||||
<uses-permission android:name="android.permission.VIBRATE"/>
|
<uses-permission android:name="android.permission.VIBRATE"/>
|
||||||
<uses-permission android:name="android.permission.NFC" />
|
<uses-permission android:name="android.permission.NFC" />
|
||||||
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
|
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"
|
||||||
|
android:usesPermissionFlags="neverForLocation" />
|
||||||
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
|
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
|
||||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||||
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
||||||
|
|||||||
Reference in New Issue
Block a user