ขอสิทธิ์ฮาร์ดแวร์สำหรับแว่นตา AI

อุปกรณ์ XR ที่ใช้ได้
คำแนะนำนี้จะช่วยให้คุณสร้างประสบการณ์การใช้งานสำหรับอุปกรณ์ XR ประเภทต่างๆ เหล่านี้ได้
แว่นตา AI

การเข้าถึงฮาร์ดแวร์ที่มีความละเอียดอ่อน เช่น กล้องและ ไมโครโฟนในแว่นตา AI ต้องได้รับความยินยอมอย่างชัดแจ้งจากผู้ใช้เช่นเดียวกับในโทรศัพท์ สิทธิ์เหล่านี้ถือเป็นสิทธิ์เฉพาะสำหรับแว่นตา และแอปของคุณต้องขอสิทธิ์เหล่านี้ในขณะรันไทม์ แม้ว่าจะมีสิทธิ์ที่เกี่ยวข้องในโทรศัพท์อยู่แล้วก็ตาม

ทำตามคู่มือนี้เพื่อทำสิ่งต่อไปนี้

  • ประกาศสิทธิ์ในไฟล์ Manifest ของแอป
  • ขอสิทธิ์
  • ดูข้อมูลเกี่ยวกับขั้นตอนการให้สิทธิ์ของผู้ใช้

ประกาศสิทธิ์ในไฟล์ Manifest ของแอป

ก่อนที่จะขอสิทธิ์ คุณต้องประกาศสิทธิ์เหล่านั้นในไฟล์ Manifest ของแอป โดยใช้องค์ประกอบ <uses-permission> การประกาศนี้จะยังคงเหมือนเดิมไม่ว่าสิทธิ์จะเป็นสำหรับฟีเจอร์ของโทรศัพท์หรือแว่นตา AI โดยเฉพาะ แต่คุณยังคงต้องขอสิทธิ์อย่างชัดเจนสำหรับฮาร์ดแวร์หรือฟังก์ชันการทำงานที่เฉพาะเจาะจงสำหรับแว่นตา

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

ขอสิทธิ์

หากต้องการขอสิทธิ์สำหรับแว่นตา AI ให้ใช้ ActivityResultLauncher ด้วยเมธอด ProjectedPermissionsResultContract() คุณต้องระบุ สิทธิ์ที่แอปของคุณต้องการ เช่น Manifest.permission.CAMERA หรือ Manifest.permission.RECORD_AUDIO ระบุเหตุผลที่ชัดเจนและกระชับ ซึ่งอธิบายว่าทำไมแอปของคุณจึงต้องการสิทธิ์เหล่านี้ เหตุผลนี้จะแสดงต่อผู้ใช้เพื่อช่วยให้ผู้ใช้มีข้อมูลประกอบการตัดสินใจ

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

ประเด็นสำคัญเกี่ยวกับโค้ด

  • เราสร้าง ActivityResultLauncher โดยใช้เมธอด ProjectedPermissionsResultContract() โดยการเรียกกลับจะรับ แผนที่ของชื่อสิทธิ์ไปยังสถานะที่ได้รับ
  • ฟังก์ชัน requestAudioPermission() จะสร้างออบเจ็กต์ ProjectedPermissionsRequestParams ออบเจ็กต์นี้รวม รายการสิทธิ์ที่เราต้องการและเหตุผลที่ผู้ใช้มองเห็น
  • การเรียกใช้ launch() ใน Launcher จะทริกเกอร์โฟลว์คำขอสิทธิ์สำหรับผู้ใช้
  • แอปควรจัดการทั้งผลลัพธ์ที่ได้รับอนุญาตและถูกปฏิเสธอย่างเหมาะสมใน การเรียกกลับของ Launcher

ทําความเข้าใจโฟลว์ของผู้ใช้ในการขอสิทธิ์

เมื่อคุณเปิดใช้คำขอสิทธิ์โดยใช้วิธี ProjectedPermissionsResultContract() ระบบจะเริ่มขั้นตอนของผู้ใช้ที่ประสานกัน ทั้งในแว่นตา AI และโทรศัพท์

ในระหว่างโฟลว์ผู้ใช้ของสิทธิ์ แอปและผู้ใช้จะได้รับสิ่งต่อไปนี้

  1. ในแว่นตา AI: กิจกรรมจะปรากฏในอุปกรณ์ที่ฉายภาพ (แว่นตา) โดยสั่งให้ผู้ใช้มองโทรศัพท์เพื่อดำเนินการต่อ

  2. ในโทรศัพท์: กิจกรรมจะเปิดขึ้นพร้อมกันในอุปกรณ์โฮสต์ (โทรศัพท์) หน้าจอนี้จะแสดงสตริงเหตุผลที่คุณระบุและให้ตัวเลือกแก่ผู้ใช้ในการดำเนินการต่อหรือยกเลิก

  3. ในโทรศัพท์: หากผู้ใช้ยอมรับเหตุผล กล่องโต้ตอบสิทธิ์ของระบบ Android ที่แก้ไขแล้วจะปรากฏในโทรศัพท์เพื่อแจ้งให้ผู้ใช้ทราบว่าตนกำลังให้สิทธิ์สำหรับอุปกรณ์แว่นตา AI (ไม่ใช่โทรศัพท์) และผู้ใช้สามารถให้หรือปฏิเสธสิทธิ์อย่างเป็นทางการได้

  4. การรับผลลัพธ์: หลังจากที่ผู้ใช้เลือกตัวเลือกสุดท้ายแล้ว ระบบจะปิดกิจกรรมทั้งในโทรศัพท์และแว่นตา AI จากนั้นระบบจะเรียกใช้การเรียกกลับ ActivityResultLauncher ของคุณพร้อมกับแผนที่ที่มีสถานะที่ได้รับสำหรับสิทธิ์ที่ขอแต่ละรายการ