Yapay zeka gözlükleri için donanım izni isteme

Geçerli XR cihazlar
Bu kılavuz, bu tür XR cihazlar için deneyimler oluşturmanıza yardımcı olur.
AI Glasses

Tıpkı telefonlarda olduğu gibi, yapay zeka gözlüklerinde kamera ve mikrofon gibi hassas donanımlara erişmek için kullanıcının açık izni gerekir. Bunlar gözlüğe özel izinler olarak kabul edilir ve uygulamanız, telefonda ilgili izinlere sahip olsa bile bunları çalışma zamanında istemelidir.

Bu kılavuzu kullanarak:

  • Uygulamanızın manifest dosyasında izin beyan etme
  • İzin iste
  • İzinler kullanıcı akışı hakkında bilgi

Uygulamanızın manifest dosyasındaki izinleri beyan etme

İzin istemeden önce <uses-permission> öğesini kullanarak izinleri uygulamanızın manifest dosyasında beyan etmeniz gerekir. Bu beyan, izin telefona veya yapay zeka gözlüğüne özgü bir özelliğe yönelik olsa da aynı kalır ancak gözlüğe özgü donanım veya işlevler için yine de açıkça istemeniz gerekir.

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

İzin iste

Yapay zeka gözlükleri için izin istemek üzere ActivityResultLauncher yöntemini ProjectedPermissionsResultContract() ile birlikte kullanırsınız. Uygulamanızın hangi izinleri gerektirdiğini belirtmeniz gerekir. Örneğin, Manifest.permission.CAMERA veya Manifest.permission.RECORD_AUDIO. Uygulamanızın bu izinlere neden ihtiyaç duyduğunu açıklayan net ve kısa bir gerekçe sunun. Bu gerekçe, kullanıcının bilinçli bir karar vermesine yardımcı olmak için gösterilir.

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()
    }
}

Kodla ilgili önemli noktalar

İzin isteği kullanıcı akışını anlama

ProjectedPermissionsResultContract() yöntemini kullanarak bir izin isteği başlattığınızda sistem, hem yapay zeka gözlüğü hem de telefonda koordineli bir kullanıcı akışı başlatır.

İzinler kullanıcı işlemleri akışı sırasında uygulamanız ve kullanıcı şunları bekleyebilir:

  1. Yapay zeka gözlüğünde: Yansıtılan cihazda (gözlük), kullanıcının devam etmek için telefonuna bakmasını isteyen bir etkinlik gösterilir.

  2. Telefonda: Aynı anda ana makine cihazında (telefon) bir etkinlik başlatılır. Bu ekranda, sağladığınız gerekçe dizesi gösterilir ve kullanıcıya devam etme veya iptal etme seçeneği sunulur.

  3. Telefonda: Kullanıcı gerekçeyi kabul ederse telefonda değiştirilmiş bir Android sistem izni iletişim kutusu gösterilir. Bu iletişim kutusunda, kullanıcının izni telefon için değil, yapay zeka gözlüğü cihazı için verdiği belirtilir. Kullanıcı, izni resmi olarak verebilir veya reddedebilir.

  4. Sonucu alma: Kullanıcı son seçimini yaptıktan sonra hem telefondaki hem de yapay zeka gözlüğündeki etkinlikler kapatılır. Ardından, istenen her izin için verilen durumu içeren bir haritayla ActivityResultLauncher geri aramanız çağrılır.