docs.unity3d.com
Search Results for

    Show / Hide Table of Contents

    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.

    Additional resources

    • Android permissions
    • Plane detection
    • Hand tracking
    • Face tracking
    • Gaze interaction profile
    In This Article
    Back to top
    Copyright © 2025 Unity Technologies — Trademarks and terms of use
    • Legal
    • Privacy Policy
    • Cookie Policy
    • Do Not Sell or Share My Personal Information
    • Your Privacy Choices (Cookie Settings)