Assim como em um smartphone, o acesso a hardware sensível, como a câmera e o microfone dos óculos com áudio e de tela, exige o consentimento do usuário explícito. Essas são consideradas permissões específicas para óculos, e o app precisa solicitá-las no momento da execução, mesmo que já tenha as permissões correspondentes no smartphone.
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 recurso específico de smartphone ou de óculos, mas
ainda é necessário solicitá-la explicitamente para hardware ou
funcionalidades específicas de óculos.
<manifest ...>
<!-- Only declare permissions that your app actually needs. In this example,
we declare permissions for the camera. -->
<uses-permission android:name="android.permission.CAMERA"/>
<application ...>
...
</application>
</manifest>
Antes de solicitar permissões para os óculos
Consulte os princípios e fluxos de trabalho de permissões para garantir que você ofereça a melhor experiência aos usuários, como verificar se o usuário já concedeu as permissões de execução que o app exige e se o app precisa mostrar uma justificativa ao usuário antes de solicitar permissões específicas para os óculos.
Cenários de permissões
Há vários cenários que você pode encontrar ao solicitar permissões de execução perigosas em óculos de áudio e com tela virtual:
- Solicitar permissões de execução de uma atividade projetada
- Solicitar permissões de execução de uma atividade do smartphone
Consulte as seções a seguir neste guia para saber mais sobre cada cenário.
Solicitar permissões de execução de uma atividade projetada
Para solicitar permissões de execução para óculos de áudio ou com tela virtual de uma atividade
projetada, use o método ProjectedActivityCompat.requestPermissions.
A chamada desse método aciona um fluxo do usuário coordenado nos óculos e no smartphone host.
- Nos óculos: o sistema abre uma atividade complementar projetada nos óculos, instruindo o usuário a verificar o smartphone para responder à solicitação de permissão.
- No smartphone: uma caixa de diálogo de permissão do sistema Android aparece na tela do smartphone. A caixa de diálogo indica explicitamente que o usuário está concedendo a permissão para os óculos, e não para o smartphone. O usuário pode conceder ou negar a solicitação.
O exemplo a seguir mostra como solicitar permissões de óculos de uma atividade projetada:
@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) private fun requestCameraPermission() { lifecycleScope.launch { try { ProjectedActivityCompat.requestPermissions( this@PermissionsFromProjectedActivity, arrayOf(Manifest.permission.CAMERA), // CAMERA_PERMISSION_REQUEST_CODE is a developer defined constant CAMERA_PERMISSION_REQUEST_CODE, ) } catch (e: IllegalStateException) { // Thrown when the projected system service can't be bound. Log.e(TAG, "Camera permission request failed: projected service unavailable.", e) } } }
Pontos principais sobre o código
- Use
ProjectedActivityCompat.requestPermissionsem vez do método padrãoActivityCompat. Esse método tem como destino explícito as permissões de tempo de execução para óculos de áudio e display, e não o smartphone host.
Processar os resultados da permissão
Depois que o usuário responde à caixa de diálogo de permissão no smartphone, a decisão é
enviada ao app invocando o callback
onRequestPermissionsResult.
O sistema encerra automaticamente a atividade complementar projetada. Nos óculos de áudio, isso acontece depois que o alerta de áudio termina de tocar. Em óculos de exibição, isso acontece depois que o usuário responde a todas as caixas de diálogo de permissão.
Para processar a resposta, substitua onRequestPermissionsResult() na instância
Activity que iniciou a solicitação de permissão.
O snippet de código a seguir mostra como processar o callback e verificar se o usuário concedeu as permissões solicitadas:
@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<String>, grantResults: IntArray, deviceId: Int, ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults, deviceId) if (requestCode != CAMERA_PERMISSION_REQUEST_CODE) return val isCameraGranted = grantResults.getOrNull(permissions.indexOf(Manifest.permission.CAMERA)) == PackageManager.PERMISSION_GRANTED if (isCameraGranted) { initializeCameraFeatures() } else { onCameraPermissionDenied() } }
Pontos principais sobre o código
- Use a sobrecarga
deviceIdcom o callbackonRequestPermissionsResultpara garantir que o status da permissão seja mapeado corretamente para o contexto específico, como o áudio ou os óculos com tela virtual, em vez do smartphone host. - O app precisa processar os resultados concedidos e negados corretamente.
Solicitar permissões de execução em uma atividade do smartphone
Se o app estiver sendo executado em uma atividade do smartphone, mas precisar de permissões para áudio ou
óculos com tela virtual (por exemplo, para permitir que um usuário mude um stream de vídeo para a câmera dos
óculos para uma perspectiva em primeira pessoa), solicite as permissões usando o
método Activity#requestPermissions(permissions, requestCode,
deviceId) específico do dispositivo:
// Request the projected permission from phone activity requestPermissions( arrayOf(Manifest.permission.CAMERA), // REQUEST_CODE_GLASSES_CAMERA is a developer-defined constant REQUEST_CODE_GLASSES_CAMERA, projectedDeviceId )
Pontos principais sobre o código
- Para segmentar óculos de áudio e tela, extraia o ID do dispositivo apropriado de um contexto projetado que você criou usando
createProjectedDeviceContext. Transmita esse ID com sua chamada para o métodorequestPermissions.
Processar os resultados da permissão
Depois que o usuário responde à caixa de diálogo de permissão no smartphone, a decisão é
enviada ao app invocando o callback
onRequestPermissionsResult.
Para processar a resposta, substitua onRequestPermissionsResult na
instância Activity que iniciou a solicitação de permissão.
O snippet de código a seguir mostra como processar o callback e verificar se o usuário concedeu as permissões solicitadas:
@RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<String>, grantResults: IntArray, deviceId: Int, ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults, deviceId) if (requestCode != CAMERA_PERMISSION_REQUEST_CODE) return val isCameraGranted = grantResults.getOrNull(permissions.indexOf(Manifest.permission.CAMERA)) == PackageManager.PERMISSION_GRANTED if (isCameraGranted) { initializeCameraFeatures() } else { onCameraPermissionDenied() } }
Pontos principais sobre o código
- Use a sobrecarga
deviceIdcom o callbackonRequestPermissionsResultpara garantir que o status da permissão seja mapeado corretamente para o contexto específico, como os óculos de áudio ou de exibição, em vez do smartphone host. - O app precisa processar os resultados concedidos e negados corretamente.