Solicitar permissões de hardware para óculos de IA

Dispositivos XR aplicáveis
Estas orientações ajudam você a criar experiências para esses tipos de dispositivos de XR.
Óculos de IA

Assim como em um smartphone, o acesso a hardware sensível, como a câmera e o microfone dos óculos de IA, exige consentimento explícito do usuário. Essas são consideradas permissões específicas para óculos, e seu app precisa solicitá-las durante a execução, mesmo que já tenha as permissões correspondentes no smartphone.

Siga este guia para:

  • Declarar permissões no manifesto do app
  • Solicitar permissões
  • Saiba mais sobre o fluxo de usuários de permissões

Declare as permissões no manifesto do app

Antes de solicitar permissões, declare-as no arquivo de manifesto do app usando o elemento <uses-permission>. Essa declaração permanece a mesma, seja a permissão para um smartphone ou um recurso específico dos óculos de IA, mas ainda é necessário solicitá-la explicitamente para hardware ou funcionalidade específica dos óculos.

<manifest ...>
    <!-- Only declare permissions that your app actually needs. In this example,
    we declare permissions for the microphone. -->
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <application ...>
        ...
    </application>
</manifest>

Solicitar permissões

Para solicitar permissões para óculos de IA, use o ActivityResultLauncher com o método ProjectedPermissionsResultContract(). Você precisa especificar quais permissões seu app exige, como Manifest.permission.CAMERA ou Manifest.permission.RECORD_AUDIO. Forneça uma justificativa clara e concisa explicando por que o app precisa dessas permissões. Essa justificativa é mostrada ao usuário para ajudar na tomada de decisão.

class SampleGlassesActivity : ComponentActivity() {

  // Register the permissions launcher
    private val requestPermissionLauncher: ActivityResultLauncher<List<ProjectedPermissionsRequestParams>> =
        registerForActivityResult(ProjectedPermissionsResultContract()) { results ->
            // Check the result for the specific RECORD_AUDIO permission
            if (results[Manifest.permission.RECORD_AUDIO] == true) {
                onPermissionGranted()
            } else {
                onPermissionDenied()
            }
        }

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // Audio permission is critical for the displayless AI glasses experience
        checkAndRequestAudioPermission()

        setContent {
            GlimmerTheme {
                DisplayGlassesUi()
            }
        }
    }

    // Checks for the required RECORD_AUDIO permission and requests it if necessary.

    private fun checkAndRequestAudioPermission() {
        val permission = Manifest.permission.RECORD_AUDIO
        val permissionStatus = ContextCompat.checkSelfPermission(this, permission)

        if (permissionStatus == PackageManager.PERMISSION_GRANTED) {
            // Permission is already granted
            onPermissionGranted()
        } else {
            // Permission is not granted, request it
            requestAudioPermission()
        }
    }

    private fun requestAudioPermission() {
        val params = ProjectedPermissionsRequestParams(
                        permissions = listOf(Manifest.permission.RECORD_AUDIO),
            // The rationale should explain why this permission is needed.
            // For displayless AI glasses, it's often the main input mechanism.
            rationale = "Microphone access is essential for voice commands and features on these AI glasses."
        )
        requestPermissionLauncher.launch(listOf(params))
    }

    private fun onPermissionGranted() {
        // Implement the logic for when the permission is granted

    }

    private fun onPermissionDenied() {
        // Implement the logic for when the permission is denied.
        // On displayless AI glasses, if the app requires voice/mic it should exit the activity if the critical permission is denied.
        finish()
    }
}

Pontos principais sobre o código

Entender o fluxo de usuários de solicitação de permissão

Quando você inicia uma solicitação de permissão usando o método ProjectedPermissionsResultContract(), o sistema inicia um fluxo de usuário coordenado nos óculos de IA e no smartphone.

Durante o fluxo de permissões, confira o que o app e o usuário podem esperar:

  1. Nos óculos de IA: uma atividade aparece no dispositivo projetado (óculos), instruindo o usuário a olhar para o smartphone para continuar.

  2. No smartphone: ao mesmo tempo, uma atividade é iniciada no dispositivo host (smartphone). Essa tela mostra a string de justificativa que você forneceu e dá ao usuário a opção de continuar ou cancelar.

  3. No smartphone: se o usuário aceitar a justificativa, uma caixa de diálogo modificada de permissão do sistema Android vai aparecer no smartphone informando que ele está concedendo a permissão para o dispositivo de óculos de IA (não para o smartphone). O usuário pode conceder ou negar formalmente a permissão.

  4. Receber o resultado: depois que o usuário faz a escolha final, as atividades no smartphone e nos óculos de IA são dispensadas. Seu callback ActivityResultLauncher será invocado com um mapa que contém o status concedido para cada permissão solicitada.