Sama seperti di ponsel, mengakses hardware sensitif seperti kamera dan mikrofon di kacamata pintar audio dan kacamata pintar dengan layar 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.
Mendeklarasikan izin dalam manifes aplikasi Anda
Sebelum meminta izin, Anda harus mendeklarasikannya dalam file manifes aplikasi
menggunakan elemen <uses-permission>. Pernyataan ini tetap
sama, baik izinnya untuk fitur khusus ponsel atau kacamata, 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 camera. -->
<uses-permission android:name="android.permission.CAMERA"/>
<application ...>
...
</application>
</manifest>
Sebelum meminta izin kacamata
Tinjau prinsip dan alur kerja izin untuk memastikan Anda memberikan pengalaman terbaik bagi pengguna, seperti memeriksa apakah pengguna telah memberikan izin runtime yang diperlukan aplikasi Anda dan apakah aplikasi Anda harus menampilkan alasan kepada pengguna sebelum meminta izin khusus kacamata.
Skenario izin
Ada berbagai skenario yang mungkin Anda alami saat meminta izin akses runtime berbahaya di kacamata audio dan layar:
- Meminta izin runtime dari aktivitas yang diproyeksikan
- Meminta izin runtime dari aktivitas ponsel
Lihat bagian berikut dalam panduan ini untuk mengetahui detail tentang setiap skenario.
Meminta dan menangani izin runtime dari aktivitas yang diproyeksikan
Untuk meminta izin bagi kacamata pintar audio dan kacamata pintar dengan layar, pertama-tama gunakan
ActivityResultLauncher dengan metode
ProjectedPermissionsResultContract untuk mendaftarkan peluncur
izin. Setelah pengguna menindaklanjuti permintaan izin, callback
akan menerima peta nama izin ke status yang diberikan.
// 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 } }
Poin penting tentang kode
- Anda perlu menentukan izin yang diperlukan aplikasi Anda, seperti
Manifest.permission.CAMERAatauManifest.permission.RECORD_AUDIO. - Aplikasi Anda harus menangani hasil yang diberikan dan ditolak dengan baik di callback peluncur.
Untuk memicu alur permintaan izin, teruskan daftar
ProjectedPermissionsRequestParams ke metode launch peluncur izin
yang terdaftar. Objek ProjectedPermissionsRequestParams
menggabungkan izin manifes yang diminta dengan string rationale
kustom. String rationale harus menjelaskan dengan jelas dan ringkas alasan aplikasi memerlukan akses ke fitur hardware kacamata (seperti kamera atau mikrofon).
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)) }
Poin penting tentang kode
- Memanggil
launchdi peluncur akan memicu alur pengguna permintaan izin.
Memahami alur pengguna permintaan izin
Saat Anda meluncurkan permintaan izin menggunakan metode
ProjectedPermissionsResultContract, sistem akan memulai alur pengguna yang terkoordinasi di kacamata dan ponsel.
Selama alur penggunaan izin, berikut yang dapat diharapkan aplikasi dan pengguna:
Di kacamata: 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 menerima alasan, dialog izin sistem Android yang diubah akan muncul di ponsel, yang memberi tahu pengguna bahwa mereka memberikan izin untuk kacamata (bukan ponsel), dan pengguna dapat memberikan atau menolak izin secara resmi.
Menerima hasil: Setelah pengguna membuat pilihan terakhir, aktivitas di ponsel dan kacamata akan ditutup. Callback
ActivityResultLauncherAnda kemudian dipanggil dengan peta yang berisi status yang diberikan untuk setiap izin yang diminta.
Meminta izin runtime dalam aktivitas ponsel
Jika aplikasi Anda berjalan dalam aktivitas ponsel, tetapi memerlukan izin untuk audio atau
kacamata tampilan—misalnya, untuk mengizinkan pengguna mengalihkan streaming video ke kamera kacamata untuk sudut pandang orang pertama—minta izin menggunakan metode Activity#requestPermissions(permissions, requestCode,
deviceId) khusus perangkat.
Untuk menargetkan kacamata audio dan tampilan, dapatkan ID perangkat yang sesuai dengan memanggil
getDeviceId pada konteks perangkat yang diproyeksikan. Teruskan ID ini saat meminta
izin dari aktivitas ponsel Anda, seperti yang ditunjukkan dalam contoh berikut:
// 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 )
Menangani hasil izin
Setelah pengguna merespons dialog izin di ponsel, keputusannya akan dikirimkan ke aplikasi Anda dengan memanggil callback onRequestPermissionsResult.
Untuk menangani respons, ganti onRequestPermissionsResult dalam instance
Activity yang memulai permintaan izin.
Cuplikan kode berikut menunjukkan cara menangani callback dan memverifikasi apakah pengguna memberikan izin yang diminta:
private companion object { // REQUEST_CODE_GLASSES_CAMERA is a developer-defined constant. const val REQUEST_CODE_GLASSES_CAMERA = 1001 } @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) override fun onRequestPermissionsResult( requestCode: Int, permissions: Array<out String>, grantResults: IntArray, deviceId: Int ) { super.onRequestPermissionsResult(requestCode, permissions, grantResults, deviceId) // Handle the result of the permission request if (requestCode == REQUEST_CODE_GLASSES_CAMERA && deviceId == projectedDeviceId) { if (grantResults.isNotEmpty() && grantResults[0] == PackageManager.PERMISSION_GRANTED) { // Proceed with glasses camera features } else { // Handle glasses permission denied } } }
Poin penting tentang kode
- Gunakan penggantian
deviceIddengan callbackonRequestPermissionsResultuntuk memastikan status izin dipetakan dengan benar ke konteks tertentu, seperti kacamata audio atau tampilan, bukan ponsel host. - Aplikasi Anda harus menangani hasil yang diberikan dan ditolak dengan baik.