Skip to content

Commit bd63a23

Browse files
committed
Create AndroidPermissionUtilities.cs
1 parent 9dbf11d commit bd63a23

2 files changed

Lines changed: 73 additions & 0 deletions

File tree

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
// Copyright (c) Mixed Reality Toolkit Contributors
2+
// Licensed under the BSD 3-Clause
3+
4+
using UnityEngine;
5+
6+
#if UNITY_ANDROID && UNITY_OPENXR_PRESENT && !UNITY_EDITOR
7+
using System.Collections.Generic;
8+
using UnityEngine.Android;
9+
using UnityEngine.XR.OpenXR;
10+
#endif
11+
12+
namespace MixedReality.Toolkit.Input
13+
{
14+
public class AndroidPermissionUtilities : MonoBehaviour
15+
{
16+
[SerializeField, Tooltip("A key (OpenXR extension name) value (Android permission string) pairing to request at runtime if the extension is supported and enabled.")]
17+
private Unity.XR.CoreUtils.Collections.SerializableDictionary<string, string> permissions;
18+
19+
#if UNITY_ANDROID && UNITY_OPENXR_PRESENT && !UNITY_EDITOR
20+
protected virtual void Start()
21+
{
22+
List<string> neededPermissions = new(permissions.Count);
23+
24+
for (int i = 0; i < permissions.Count; i++)
25+
{
26+
string extensionName = permissions.SerializedItems[i].Key;
27+
string permissionName = permissions.SerializedItems[i].Value;
28+
if (!string.IsNullOrWhiteSpace(extensionName) &&
29+
!string.IsNullOrWhiteSpace(permissionName) &&
30+
OpenXRRuntime.IsExtensionEnabled(extensionName) &&
31+
!Permission.HasUserAuthorizedPermission(permissionName))
32+
{
33+
neededPermissions.Add(permissionName);
34+
}
35+
}
36+
37+
if (neededPermissions.Count > 0)
38+
{
39+
PermissionCallbacks callbacks = new();
40+
callbacks.PermissionDenied += OnPermissionDenied;
41+
callbacks.PermissionGranted += OnPermissionGranted;
42+
Permission.RequestUserPermissions(neededPermissions.ToArray(), callbacks);
43+
Debug.Log($"MRTK is requesting the following permissions for {gameObject.name}: {string.Join(", ", neededPermissions)}.");
44+
}
45+
else
46+
{
47+
Debug.Log($"All permissions for {gameObject.name} already granted for MRTK.");
48+
}
49+
}
50+
51+
void OnPermissionDenied(string permission)
52+
{
53+
Debug.Log($"{permission} denied or not needed on this runtime ({OpenXRRuntime.name}). MRTK may not work as expected.");
54+
}
55+
56+
void OnPermissionGranted(string permission)
57+
{
58+
Debug.Log($"{permission} newly granted for MRTK.");
59+
}
60+
#endif
61+
}
62+
}

org.mixedrealitytoolkit.input/Utilities/AndroidPermissionUtilities.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)