Sama seperti di ponsel, mengakses hardware sensitif seperti kamera dan mikrofon di kacamata AI memerlukan izin eksplisit pengguna. Izin ini dianggap sebagai izin khusus kacamata, dan aplikasi Anda harus memintanya saat runtime, meskipun aplikasi sudah memiliki izin yang sesuai di ponsel.
Ikuti panduan ini untuk:
- Mendeklarasikan izin dalam manifes aplikasi Anda
- Meminta izin
- Mempelajari alur pengguna izin
Mendeklarasikan izin dalam manifes aplikasi Anda
Sebelum meminta izin, Anda harus mendeklarasikannya dalam file manifes aplikasi
menggunakan elemen <uses-permission>. Deklarasi ini tetap
sama, baik izinnya untuk fitur khusus ponsel atau kacamata AI, tetapi
Anda tetap harus memintanya secara eksplisit untuk hardware atau
fungsi khusus kacamata.
<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>
Meminta izin
Untuk meminta izin bagi kacamata AI, Anda menggunakan ActivityResultLauncher
dengan metode ProjectedPermissionsResultContract(). Anda perlu menentukan izin yang diperlukan aplikasi Anda, seperti Manifest.permission.CAMERA atau Manifest.permission.RECORD_AUDIO. Berikan alasan yang jelas dan ringkas yang menjelaskan mengapa aplikasi Anda memerlukan izin ini. Alasan ini ditampilkan kepada pengguna untuk membantu mereka membuat keputusan yang tepat.
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()
}
}
Poin penting tentang kode
- Kita membuat
ActivityResultLaunchermenggunakan metodeProjectedPermissionsResultContract(). Callback menerima peta nama izin ke status yang diberikan. - Fungsi
requestAudioPermission()membangun objekProjectedPermissionsRequestParams. Objek ini menggabungkan daftar izin yang kita butuhkan dan alasan yang ditampilkan kepada pengguna. - Memanggil
launch()di peluncur akan memicu alur pengguna permintaan izin. - Aplikasi Anda harus menangani hasil yang diberikan dan ditolak dengan baik di callback peluncur.
Memahami alur pengguna permintaan izin
Saat Anda meluncurkan permintaan izin menggunakan metode ProjectedPermissionsResultContract(), sistem akan memulai alur pengguna yang terkoordinasi di kacamata AI dan ponsel.
Selama alur penggunaan izin, berikut yang dapat diharapkan aplikasi dan pengguna:
Di kacamata AI: Aktivitas muncul di perangkat yang diproyeksikan (kacamata), yang menginstruksikan pengguna untuk melihat ponsel mereka untuk melanjutkan.
Di ponsel: Secara bersamaan, aktivitas diluncurkan di perangkat host (ponsel). Layar ini menampilkan string alasan yang Anda berikan dan memberi pengguna opsi untuk melanjutkan atau membatalkan.
Di ponsel: Jika pengguna menyetujui alasan tersebut, dialog izin sistem Android yang telah diubah akan muncul di ponsel, yang memberi tahu pengguna bahwa mereka memberikan izin untuk perangkat kacamata AI (bukan ponsel), dan pengguna dapat memberikan atau menolak izin secara resmi.
Menerima hasil: Setelah pengguna membuat pilihan terakhir, aktivitas di ponsel dan kacamata AI akan ditutup. Callback
ActivityResultLauncherAnda kemudian dipanggil dengan peta yang berisi status yang diberikan untuk setiap izin yang diminta.