安卓藍牙動態權限


安卓藍牙動態權限

安卓7.0及以下版本

在 IDE 的 Project - Options 菜單彈出來的窗口里面,找到左邊樹結構的: Application -- Uses Permissions 項目,則右邊會出來一堆權限讓你打勾。這里要勾選上 Bluetooth 和 Bluetooth admin 兩項。
老的安卓版本,勾選這兩項就可以了。
安卓8.0及以上版本,還需要運行期用代碼動態申請權限
代碼里面:
首先要實現一個函數:
procedure RequestPermissionsResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>);
這個函數是一個動態申請權限的結果的回調函數。
在啟動 BLE 的時候,通過以下代碼申請權限:
PermissionsService.RequestPermissions([FLocationPermission], RequestPermissionsResult, DisplayRationale);
上述的代碼的 PermissionsService 是聲明在 System.Permissions 里面的。
上述代碼里面的 RequestPermissionsResult 就是前面的那個回調函數。它在這里被調用,而且還被填入參數。
上述代碼里面的 FLocationPermission: string; 它來自:
procedure TForm6.FormCreate(Sender: TObject);

begin

{$IFDEF ANDROID}

  FLocationPermission := JStringToString(TJManifest_permission.JavaClass.ACCESS_COARSE_LOCATION);

{$ENDIF}

end;

  

上述代碼里面用到的 JStringToString 要 Uses Androidapi.Helpers;

上述代碼中還有一個 DisplayRationale 也是一個函數:

procedure TForm6.DisplayRationale(Sender: TObject; const APermissions: TArray<string>; const APostRationaleProc: TProc);

begin

  TDialogService.ShowMessage('We need to be given permission to discover BLE devices',

    procedure(const AResult: TModalResult)

    begin

      APostRationaleProc;

    end)

end;

  在 RequestPermissionsResult 這個函數里面,判斷是否通過權限,如果通過,才去調用藍牙的方法。

procedure TForm6.RequestPermissionsResult(Sender: TObject; const APermissions: TArray<string>; const AGrantResults: TArray<TPermissionStatus>);

begin

  // 1 permissions involved: ACCESS_COARSE_LOCATION

  if (Length(AGrantResults) = 1) and (AGrantResults[0] = TPermissionStatus.Granted) then

    StartBLEDiscovery

  else

    TDialogService.ShowMessage('Cannot start BLE scan as the permission has not been granted');

end;

  

到這里,APP 使用手機的 BLE 的權限問題才搞定。
奇怪的是,因為這里是使用的“定位”權限,APP 運行時,會彈出窗口詢問用戶,APP要使用定位權限,是否允許。用戶允許后,的確可以使用 BLE 了。同樣的測試手機,如果我不去做動態權限申請,直接調用 BLE 的相關功能,沒有任何提示,但 BLE 的相關功能的確出不來。
難道沒有單獨的【藍牙】權限?給用戶一個定位權限的提示,用於打開藍牙,有點奇怪。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM