User Permissions UX

Tango works by using visual cues from the device's cameras. We want users to understand when and why the cameras are being used, so you must ask users for permission prior to using area learning or displaying the camera preview.

Users may control access to Tango features for each application. This can happen when Tango requests it, or if the user grants permission at request time, they can also revoke permission later using the permission manager under Settings > Device > Project Tango > Permissions. For more information, see Managing Permissions.

Requesting permission

Applications using Tango need permission from the user to use area learning, depth perception or the camera previews.

Requesting permission for area learning varies by language. Here are the API- specific instructions:

Applications that intend to use depth perception or show the camera preview must request the Android Camera permission in their manifest to get access to the camera feed through the Tango API.

We recommend that an application does not request a permission until it is necessary. The user should see an immediate effect of the permissions they grant. It is usually not recommended to have the application request permissions at startup; this will slow down initialization and burden the user with permission prompts for features they may never use.

Area Learning permission request interface

Handling permission denial

The TangoErrorType has several enumerated values to let you know if an API call failed due to not having proper user permissions:


If the user denies a permission request, or revokes permission for Area Learning, the TangoService will return the appropriate error type when an application tries to use that feature.

If your application requires but didn’t request the camera permission in AndroidManifest.xml, the system will return the TANGO_NO_CAMERA_PERMISSION error type.

You can handle these permission denial situations in several ways. One way is to simply have the application inform the user that it cannot run without the requested permission, and fail gracefully. Another possibility is to implement a fallback method. For example, you could use motion tracking alone if the user did not grant area learning permissions.