Meminta izin hardware untuk kacamata AI

Perangkat XR yang kompatibel
Panduan ini membantu Anda membangun pengalaman untuk jenis perangkat XR ini.
Kacamata AI

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

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:

  1. Di kacamata AI: Aktivitas muncul di perangkat yang diproyeksikan (kacamata), yang menginstruksikan pengguna untuk melihat ponsel mereka untuk melanjutkan.

  2. 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.

  3. 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.

  4. Menerima hasil: Setelah pengguna membuat pilihan terakhir, aktivitas di ponsel dan kacamata AI akan ditutup. Callback ActivityResultLauncher Anda kemudian dipanggil dengan peta yang berisi status yang diberikan untuk setiap izin yang diminta.