Assim como em um smartphone, o acesso a hardware sensível, como a câmera em óculos com áudio e óculos com tela, exige o consentimento explícito do usuário. Elas são consideradas permissões específicas para óculos, e seu app precisa solicitá-las no momento da execução, mesmo que já tenha as permissões correspondentes no smartphone.
Declarar as permissões no manifesto do app
Antes de solicitar permissões, é necessário declará-las 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ão 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 tela:
- Solicitar permissões de execução de uma atividade projetada
- Solicitar permissões de execução de uma atividade no 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 tela 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 segmenta explicitamente as permissões de execução para óculos de áudio e tela, em vez do 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 fecha a atividade complementar projetada automaticamente. Nos óculos com áudio, isso ocorre depois que o alerta de áudio termina de tocar. Em óculos com tela, 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 de exibição, em vez do smartphone host. - Seu app precisa processar os resultados concedidos e negados de forma adequada.
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 de tela (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, use um ID do dispositivo adequado 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 o áudio ou os óculos de exibição, em vez do smartphone host. - Seu app precisa processar os resultados concedidos e negados de forma adequada.