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
- Criamos um
ActivityResultLauncherusando o métodoProjectedPermissionsResultContract(). O callback recebe um mapa de nomes de permissões para o status concedido. - A função
requestAudioPermission()cria um objetoProjectedPermissionsRequestParams. Esse objeto agrupa a lista de permissões necessárias e a justificativa para o usuário. - Chamar
launch()no iniciador aciona o fluxo de usuário de solicitação de permissão. - Seu app precisa processar os resultados concedidos e negados de maneira adequada no callback do iniciador.
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:
Nos óculos de IA: uma atividade aparece no dispositivo projetado (óculos), instruindo o usuário a olhar para o smartphone para continuar.
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.
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.
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
ActivityResultLauncherserá invocado com um mapa que contém o status concedido para cada permissão solicitada.