未授予Delphi 11.2蓝牙权限

3hvapo4f  于 2022-10-16  发布在  其他
关注(0)|答案(1)|浏览(401)

在安卓12设备上运行。在Delphi 11.1中运行良好。
我正在使用两个应用程序。在这两种中只有一种,我似乎无法获得蓝牙的许可。我已经设置了Fine Location,它在初始安装时被接受。我只需要基本的蓝牙和蓝牙管理。在一次处理一个请求(而不是一次完成所有请求)时,此操作将永久失败:

PermissionsService.RequestPermissions([cPermissionBluetooth], TakeBluetoothPermissionsResultHandler, DisplayRationale);

而且,DisplayRationale根本不起作用。在启动期间,没有来自系统的其他用户请求。
在设置>应用程序中,没有对蓝牙的具体引用。它没有告诉我为什么它失败了。根据https://developer.android.com/guide/topics/connectivity/bluetooth/permissions,我已经准备好了所有相关设置(包括位置)。目标为编译器默认设置的‘android:MaxSdkVersion=“30”’。
在我的另一个应用程序中,它要复杂得多,使用相同的蓝牙/位置设置,它可以正常工作。
我还能错过什么呢?
更新:我现在将代码更改为:

const
cPermissionBluetooth = 'android.permission.BLUETOOTH';
  cPermissionBluetoothAdmin = 'android.permission.BLUETOOTH_ADMIN';
  cPermissionBluetoothConnect = 'android.permission.BLUETOOTH_CONNECT';
  cPermissionBluetoothScan = 'android.permission.BLUETOOTH_SCAN';

procedure TMainForm.TakeBluetoothPermissionsResultHandler(Sender: TObject; const APermissions: TClassicStringDynArray; const AGrantResults: TClassicPermissionStatusDynArray);
begin
  // if TGrantResults(AGrantResults).AreAllGranted then
  if PermissionsService.IsPermissionGranted(cPermissionBluetooth) then
  begin
    DoLog('cPermissionBluetooth: Granted');
  end else
  begin
    DoLog('cPermissionBluetooth: NOT Granted!',d_error);
  end;

  if PermissionsService.IsPermissionGranted(cPermissionBluetoothConnect) then
  begin
    DoLog('cPermissionBluetoothConnect: Granted');
  end else
  begin
    DoLog('cPermissionBluetoothConnect: NOT Granted!',d_error);
  end;

  if PermissionsService.IsPermissionGranted(cPermissionBluetoothScan) then
  begin
    DoLog('cPermissionBluetoothScan: Granted');
  end else
  begin
    DoLog('cPermissionBluetoothScan: NOT Granted!',d_error);
  end;
end;

发生的情况是,基本的android.permission.BLUETOOTH没有被授予,但其他两个被授予。而且蓝牙真的起作用了。这是否意味着如果在Android 12或更高版本上运行,我就不能调用android.permission.BLUETOOTH?我现在必须特别关注Android版本,而不是在12或更高版本时才称其为Android?
那么为什么它在我的主应用程序中正常工作呢?
现在,我不能调用“是否所有权限都已授予”,因为一个权限总是失败。PS:为什么我不能使用内置的“TPermissionsService.IsEveryPermissionGranted”?它与自己的Android代码不兼容!
更新2:决赛是这样的:

<uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />

在Android 12中,永久不被授予的是:“android.permission.BLUETOOTH”。
(我在对此的一条评论中犯了一个错误)。
如果我忽略这一点,蓝牙确实工作正常。

8zzbczxx

8zzbczxx1#

我不得不这样更改我的代码:

if TOSVersion.Major < 12 then
          begin
            LogClient('TOSVersion.Major < 12');
            PermissionsService.RequestPermissions([cPermissionReadExternalStorage,
              cPermissionWriteExternalStorage, cPermissionLocation, cPermissionBluetooth, cPermissionCamera],
              TakeGeneralPermissionsResultHandler, DisplayRationale);
          end else
          begin
            LogClient('TOSVersion.Major >= 12');
            PermissionsService.RequestPermissions([cPermissionReadExternalStorage,
              cPermissionWriteExternalStorage, cPermissionLocation, cPermissionBluetoothConnect, cPermissionBluetoothScan, cPermissionCamera],
              TakeGeneralPermissionsResultHandler, DisplayRationale);
          end;

相关问题