Unity( 2022.3.11f1 (64-bit))で作ったAndroidアプリケーションのPermissionを設定します。
Android 12(API Level 31)でBluetooth接続を行う際のPermissionが少し変わったため、この設定が必要となりました。
AndroidManifest.xmlの変更
- 「Edit」メニューの「Project Setting…」をクリックします。
- 表示された「Project Settings」画面の左側の「Player」をクリックし、「Publishing Settings」の「Build」の「Custom MainManifest」をチェックします。
- チェックすると、プロジェクトの保存されてるフォルダのAssets/Plugins/Androidの中にAndroidManifest.xmlが作成されます。このファイルを編集してAndroidアプリに適用されるAndroidManifest.xmlをカスタマイズします。
<uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
実行時の権限取得
アプリケーション実行時にユーザーの承認をリクエストしてBluetooth関連の権限を取得します。UnityのStartメソッドに次にコードを設定します。
using UnityEngine.Android; ・・・ void Start() { // Request permissions, as explained in: https://www.bellingo.de/blog/bluetooth-permissions-on-android-12-with-unity/ #if UNITY_2020_2_OR_NEWER #if UNITY_ANDROID if (!Permission.HasUserAuthorizedPermission(Permission.CoarseLocation) || !Permission.HasUserAuthorizedPermission(Permission.FineLocation) || !Permission.HasUserAuthorizedPermission("android.permission.BLUETOOTH_SCAN") || !Permission.HasUserAuthorizedPermission("android.permission.BLUETOOTH_ADVERTISE") || !Permission.HasUserAuthorizedPermission("android.permission.BLUETOOTH_CONNECT")) Permission.RequestUserPermissions(new string[] { Permission.CoarseLocation, Permission.FineLocation, "android.permission.BLUETOOTH_SCAN", "android.permission.BLUETOOTH_ADVERTISE", "android.permission.BLUETOOTH_CONNECT" }); if (!Permission.HasUserAuthorizedPermission("android.permission.BLUETOOTH_SCAN")) Permission.RequestUserPermissions(new string[] { "android.permission.BLUETOOTH_SCAN" }); #endif #endif ・・・