Unity( 2022.3.11f1 (64-bit))で作ったAndroidアプリケーションのPermissionを設定します。

Android 12(API Level 31)でBluetooth接続を行う際のPermissionが少し変わったため、この設定が必要となりました。

AndroidManifest.xmlの変更

  1. 「Edit」メニューの「Project Setting…」をクリックします。
  2. 表示された「Project Settings」画面の左側の「Player」をクリックし、「Publishing Settings」の「Build」の「Custom MainManifest」をチェックします。
  3. チェックすると、プロジェクトの保存されてるフォルダのAssets/Plugins/Androidの中にAndroidManifest.xmlが作成されます。このファイルを編集してAndroidアプリに適用されるAndroidManifest.xmlをカスタマイズします。
  4. <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

    ・・・