เช่นเดียวกับในโทรศัพท์ การเข้าถึงฮาร์ดแวร์ที่มีความละเอียดอ่อน เช่น กล้องและ ไมโครโฟนในแว่นตา AI ต้องได้รับความยินยอมของผู้ใช้อย่างชัดแจ้ง สิทธิ์เหล่านี้ถือเป็นสิทธิ์เฉพาะสำหรับแว่นตา และแอปของคุณต้องขอสิทธิ์เหล่านี้ในขณะรันไทม์ แม้ว่าจะมีสิทธิ์ที่เกี่ยวข้องในโทรศัพท์อยู่แล้วก็ตาม
ประกาศสิทธิ์ในไฟล์ Manifest ของแอป
ก่อนที่จะขอสิทธิ์ คุณต้องประกาศสิทธิ์เหล่านั้นในไฟล์ Manifest
ของแอปโดยใช้องค์ประกอบ <uses-permission> การประกาศนี้จะยังคงเหมือนเดิมไม่ว่าสิทธิ์จะเป็นสำหรับฟีเจอร์เฉพาะของโทรศัพท์หรือแว่นตา AI
แต่คุณยังคงต้องขอสิทธิ์อย่างชัดเจนสำหรับฮาร์ดแวร์หรือฟังก์ชันการทำงานเฉพาะของแว่นตา
<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>
ลงทะเบียนตัวเรียกใช้สิทธิ์
หากต้องการขอสิทธิ์สำหรับแว่นตา AI ก่อนอื่นคุณต้องใช้
ActivityResultLauncher กับเมธอด
ProjectedPermissionsResultContract เพื่อลงทะเบียนสิทธิ์
launcher
// 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 } }
ประเด็นสำคัญเกี่ยวกับโค้ด
- โค้ดจะสร้าง
ActivityResultLauncherโดยใช้เมธอดProjectedPermissionsResultContractการเรียกกลับจะได้รับแมปของชื่อสิทธิ์ไปยังสถานะที่ได้รับ - คุณต้องระบุสิทธิ์ที่แอปของคุณต้องการ เช่น
Manifest.permission.CAMERAหรือManifest.permission.RECORD_AUDIO
สร้างฟังก์ชันคำขอ
จากนั้นคุณจะสร้างฟังก์ชันที่ใช้ตัวเรียกใช้สิทธิ์ของแอปเพื่อ ขอสิทธิ์จากผู้ใช้ในรันไทม์
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)) }
ประเด็นสำคัญเกี่ยวกับโค้ด
- ฟังก์ชัน
requestHardwarePermissionsจะสร้างออบเจ็กต์ProjectedPermissionsRequestParamsออบเจ็กต์นี้รวม รายการสิทธิ์ที่แอปของคุณต้องการและเหตุผลที่แสดงต่อผู้ใช้ อธิบายเหตุผลให้ชัดเจนและกระชับเพื่ออธิบายว่าเหตุใดแอปของคุณจึงต้องการสิทธิ์เหล่านี้ - การเรียกใช้
launchใน Launcher จะทริกเกอร์โฟลว์คำขอสิทธิ์สำหรับผู้ใช้ - แอปควรจัดการทั้งผลลัพธ์ที่ได้รับอนุญาตและถูกปฏิเสธอย่างเหมาะสมในการเรียกกลับของ Launcher
สร้างฟังก์ชันตรวจสอบสิทธิ์
จากนั้นคุณจะสร้างฟังก์ชันที่ตรวจสอบได้ว่าผู้ใช้ได้ให้สิทธิ์แก่แอปของคุณหรือไม่
private fun hasCameraPermission(): Boolean { return ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED }
เพิ่มตรรกะคำขอสิทธิ์
และสุดท้าย ให้สร้างตรรกะที่ใช้ฟังก์ชันเหล่านี้เพื่อตรวจสอบและขอ สิทธิ์ในระหว่างรันไทม์
if (hasCameraPermission()) { initializeGlassesFeatures() } else { requestHardwarePermissions() }
ประเด็นสำคัญเกี่ยวกับโค้ด
- หากผู้ใช้ให้สิทธิ์ที่จำเป็นแก่แอปของคุณแล้ว ระบบจะเรียกใช้ฟังก์ชัน
initializeGlassesFeaturesเพื่อเริ่มต้นใช้งานประสบการณ์การใช้งานแอป ฟังก์ชันนี้กำหนดให้เป็นส่วนหนึ่งของกิจกรรมในแอปสำหรับแว่นตา AI
ทําความเข้าใจโฟลว์ของผู้ใช้ในการขอสิทธิ์
เมื่อคุณเปิดใช้คำขอสิทธิ์โดยใช้วิธี
ProjectedPermissionsResultContract ระบบจะเริ่มขั้นตอนของผู้ใช้ที่ประสานกัน
ทั้งในแว่นตา AI และโทรศัพท์
ในระหว่างโฟลว์ผู้ใช้ของสิทธิ์ แอปและผู้ใช้จะได้รับสิ่งต่อไปนี้
ในแว่นตา AI: กิจกรรมจะปรากฏในอุปกรณ์ที่ฉายภาพ (แว่นตา) โดยแนะนำให้ผู้ใช้ดูโทรศัพท์เพื่อดำเนินการต่อ
ในโทรศัพท์: ในเวลาเดียวกัน กิจกรรมจะเปิดขึ้นในอุปกรณ์โฮสต์ (โทรศัพท์) หน้าจอนี้จะแสดงสตริงเหตุผลที่คุณระบุและให้ตัวเลือกแก่ผู้ใช้ในการดำเนินการต่อหรือยกเลิก
ในโทรศัพท์: หากผู้ใช้ยอมรับเหตุผล กล่องโต้ตอบสิทธิ์ของระบบ Android ที่แก้ไขแล้วจะปรากฏในโทรศัพท์เพื่อแจ้งให้ผู้ใช้ทราบว่าตนกำลังให้สิทธิ์สำหรับอุปกรณ์แว่นตา AI (ไม่ใช่โทรศัพท์) และผู้ใช้สามารถให้หรือปฏิเสธสิทธิ์อย่างเป็นทางการได้
การรับผลลัพธ์: หลังจากที่ผู้ใช้เลือกตัวเลือกสุดท้ายแล้ว ระบบจะปิดกิจกรรมทั้งในโทรศัพท์และแว่นตา AI จากนั้นระบบจะเรียกใช้ Callback ของ
ActivityResultLauncherพร้อมกับแมปที่มี สถานะที่ได้รับสำหรับสิทธิ์ที่ขอแต่ละรายการ