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 tersebut sudah memiliki izin yang sesuai di ponsel.
Mendeklarasikan izin dalam manifes aplikasi
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 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 izin runtime dari aktivitas yang diproyeksikan
Untuk meminta izin runtime untuk kacamata audio atau layar dari aktivitas yang diproyeksikan, gunakan metode ProjectedActivityCompat.requestPermissions.
Memanggil metode ini akan memicu alur pengguna yang terkoordinasi di kacamata dan ponsel host.
- Di kacamata: Sistem membuka aktivitas pendamping yang diproyeksikan di kacamata, menginstruksikan pengguna untuk memeriksa ponsel mereka guna merespons permintaan izin.
- Di ponsel: Dialog izin sistem Android akan muncul di layar ponsel. Dialog secara eksplisit menunjukkan bahwa pengguna memberikan izin untuk kacamata, bukan ponsel itu sendiri. Kemudian, pengguna dapat memberikan atau menolak permintaan.
Contoh berikut menunjukkan cara meminta izin kacamata dari aktivitas yang diproyeksikan:
@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) } } }
Poin penting tentang kode
- Gunakan
ProjectedActivityCompat.requestPermissions, bukan metodeActivityCompatstandar. Metode ini secara eksplisit menargetkan izin runtime untuk audio dan kacamata pintar dengan layar, bukan ponsel host.
Menangani hasil izin
Setelah pengguna merespons dialog izin di ponsel, keputusannya akan
dikirimkan ke aplikasi Anda dengan memanggil callback
onRequestPermissionsResult.
Sistem akan menutup aktivitas pendamping yang diproyeksikan secara otomatis. Di kacamata audio, hal ini terjadi setelah peringatan audio selesai diputar. Di kacamata pintar dengan layar, hal ini terjadi setelah pengguna merespons semua dialog izin.
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:
@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() } }
Poin penting tentang kode
- Gunakan overload
deviceIddengan callbackonRequestPermissionsResultuntuk memastikan status izin dipetakan dengan benar ke konteks tertentu, seperti audio atau kacamata pintar dengan layar, bukan ponsel host. - Aplikasi Anda harus menangani hasil yang diberikan dan ditolak dengan baik.
Meminta izin runtime dalam aktivitas ponsel
Jika aplikasi Anda berjalan dalam aktivitas ponsel, tetapi memerlukan izin untuk audio atau
kacamata pintar dengan layar—misalnya, untuk memungkinkan pengguna mengalihkan streaming video ke kamera
kacamata untuk sudut pandang orang pertama—minta izin menggunakan
metode Activity#requestPermissions(permissions, requestCode,
deviceId) khusus perangkat:
// 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 )
Poin penting tentang kode
- Untuk menargetkan kacamata audio dan layar, dapatkan ID perangkat yang sesuai dari konteks yang diproyeksikan yang telah Anda buat menggunakan
createProjectedDeviceContext. Teruskan ID ini dengan panggilan Anda ke metoderequestPermissions.
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:
@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() } }
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.