Как и на телефоне, доступ к конфиденциальным аппаратным средствам, таким как камера и микрофон, в очках с искусственным интеллектом требует явного согласия пользователя. Эти разрешения считаются специфическими для очков , и ваше приложение должно запрашивать их во время выполнения, даже если у него уже есть соответствующие разрешения на телефоне.
Укажите права доступа в манифесте вашего приложения.
Перед запросом разрешений необходимо указать их в файле манифеста приложения, используя элемент <uses-permission> . Это указание остается неизменным независимо от того, требуется ли разрешение для телефона или для функции, специфичной для очков с искусственным интеллектом, но для аппаратного обеспечения или функциональности, специфичных для очков, его все равно необходимо запрашивать явно.
<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>
Зарегистрируйте средство запуска с правами доступа
Чтобы запросить разрешения для очков с искусственным интеллектом, сначала используйте ActivityResultLauncher с методом ProjectedPermissionsResultContract для регистрации средства запуска разрешений.
// Register the permissions launcher using the ProjectedPermissionsResultContract. private val requestPermissionLauncher: ActivityResultLauncher<List<ProjectedPermissionsRequestParams>> = registerForActivityResult(ProjectedPermissionsResultContract()) { results -> if (results[Manifest.permission.CAMERA] == true) { isPermissionDenied = false initializeGlassesFeatures() } else { // Handle permission denial. isPermissionDenied = true } }
Основные моменты, касающиеся кода.
- В коде создается объект
ActivityResultLauncherс использованием методаProjectedPermissionsResultContract. Функция обратного вызова получает карту имен разрешений и их статусов предоставления. - Необходимо указать, какие разрешения требуются вашему приложению, например,
Manifest.permission.CAMERAилиManifest.permission.RECORD_AUDIO.
Создайте функцию запроса
Далее вам нужно будет создать функцию, которая будет использовать средство запуска запросов разрешений вашего приложения для запроса разрешений у пользователя во время выполнения.
private fun requestHardwarePermissions() { val params = ProjectedPermissionsRequestParams( permissions = listOf(Manifest.permission.CAMERA), rationale = "Camera access is required to overlay digital content on your physical environment." ) requestPermissionLauncher.launch(listOf(params)) }
Основные моменты, касающиеся кода.
- Функция
requestHardwarePermissionsсоздает объектProjectedPermissionsRequestParams. Этот объект содержит список разрешений, необходимых вашему приложению, и обоснование для пользователя. Сделайте обоснование ясным и лаконичным, чтобы объяснить, почему вашему приложению необходимы эти разрешения. -
launchфункции запуска в панели запуска инициирует пользовательский поток запроса разрешений . - Ваше приложение должно корректно обрабатывать как одобренные, так и отклоненные результаты в функции обратного вызова запуска.
Создайте функцию проверки прав доступа.
Далее вам нужно будет создать функцию, которая будет проверять, предоставил ли пользователь необходимые разрешения вашему приложению.
private fun hasCameraPermission(): Boolean { return ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED }
Добавьте логику запроса разрешений.
И наконец, создайте логику, которая использует эти функции для проверки и запроса разрешений во время выполнения.
if (hasCameraPermission()) { initializeGlassesFeatures() } else { requestHardwarePermissions() }
Основные моменты, касающиеся кода.
- Если пользователь уже предоставил вашему приложению необходимые разрешения, вызывается функция
initializeGlassesFeaturesдля инициализации работы приложения. Эта функция определена как часть активности вашего приложения для очков с искусственным интеллектом .
Разберитесь в пользовательском процессе запроса разрешений.
При отправке запроса на разрешение с использованием метода ProjectedPermissionsResultContract система инициирует скоординированный поток действий пользователя как в очках с искусственным интеллектом, так и на телефоне.
Если в вашем приложении уже отображается Activity на телефоне, следует использовать Activity#requestPermissions(permissions, requestCode, deviceId) , где deviceId получается путем вызова метода getDeviceId для Context , возвращаемого вызовом ProjectedContext.createProjectedDeviceContext .
В процессе предоставления пользовательских разрешений ваше приложение и пользователь могут ожидать следующего:
На очках с искусственным интеллектом : на проецируемом устройстве (очках) появляется сообщение, предлагающее пользователю посмотреть на свой телефон, чтобы продолжить.
tts?.speak("Please review the permission request on your host device", TextToSpeech.QUEUE_ADD, null, "permission_request")На телефоне : Одновременно на основном устройстве (телефоне) запускается действие. На этом экране отображается предоставленная вами строка обоснования, и пользователю предлагается продолжить или отменить действие.
На телефоне : Если пользователь принимает обоснование, на телефоне появляется модифицированное диалоговое окно разрешения системы Android, сообщающее пользователю, что разрешение предоставляется устройству очков с искусственным интеллектом (а не телефону), и пользователь может официально предоставить или отклонить разрешение.
Получение результата : После того, как пользователь сделает окончательный выбор, действия на телефоне и очках с искусственным интеллектом закрываются. Затем вызывается функция обратного вызова
ActivityResultLauncherс картой, содержащей статус предоставления каждого запрошенного разрешения.