Permissions
Some XR features require system permissions on the Android XR runtime. Refer to the following table for a list of OpenXR features and the permissions they require. Each feature is documented with a code example you can use to request the relevant permission.
Feature | Permission |
---|---|
Plane detection | android.permission.SCENE_UNDERSTANDING |
Hand tracking | android.permission.HAND_TRACKING |
Face tracking | android.permission.EYE_TRACKING |
Gaze interaction profile | android.permission.EYE_TRACKING_FINE |
Request multiple permissions simultaneously
If your app needs to request multiple permissions at once, you should use Permission.RequestUserPermissions.
Use the following example code to request multiple permissions at once:
const string k_ScenePermission = "android.permission.SCENE_UNDERSTANDING";
const string k_HandTrackingPermission = "android.permission.HAND_TRACKING";
const string k_AvatarEyesPermission = "android.permission.EYE_TRACKING";
const string k_EyeGazeFinePermisson = "android.permission.EYE_TRACKING_FINE";
[SerializeField]
ARPlaneManager m_ARPlaneManager;
[SerializeField]
ARFaceManager m_ARFaceManager;
#if UNITY_ANDROID
void Start()
{
var permissions = new List<string>();
// add permissions that have not been granted by the user
if (!Permission.HasUserAuthorizedPermission(k_ScenePermission))
{
permissions.Add(k_ScenePermission);
}
else
{
// enable the AR Plane Manager component if permission is already granted
m_ARPlaneManager.enabled = true;
}
if (!Permission.HasUserAuthorizedPermission(k_HandTrackingPermission))
{
permissions.Add(k_HandTrackingPermission);
}
if (!Permission.HasUserAuthorizedPermission(k_EyeGazeFinePermisson))
{
permissions.Add(k_EyeGazeFinePermisson);
}
else
{
// enable the AR Face Manager component if permission is already granted
m_ARFaceManager.enabled = true;
}
if (!Permission.HasUserAuthorizedPermission(k_AvatarEyesPermission))
{
permissions.Add(k_AvatarEyesPermission);
}
// setup callbacks to be called depending on whether permission is granted
var callbacks = new PermissionCallbacks();
callbacks.PermissionDenied += OnPermissionDenied;
callbacks.PermissionGranted += OnPermissionGranted;
Permission.RequestUserPermissions(permissions.ToArray(), callbacks);
}
void OnPermissionDenied(string permission)
{
// handle denied permission
}
void OnPermissionGranted(string permission)
{
// enable the corresponding AR Manager component after required permission is granted
if (permission == k_ScenePermission)
{
m_ARPlaneManager.enabled = true;
}
else if (permission == k_AvatarEyesPermission)
{
m_ARFaceManager.enabled = true;
}
}
#endif // UNITY_ANDROID
Refer to Request runtime permissions for more information on Android permissions in Unity.