在安卓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”。
(我在对此的一条评论中犯了一个错误)。
如果我忽略这一点,蓝牙确实工作正常。
1条答案
按热度按时间8zzbczxx1#
我不得不这样更改我的代码: