การเข้าถึงฮาร์ดแวร์ที่มีความละเอียดอ่อน เช่น กล้องและ ไมโครโฟนในแว่นตา 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 และโทรศัพท์
ในระหว่างโฟลว์ผู้ใช้ของสิทธิ์ แอปและผู้ใช้จะได้รับสิ่งต่อไปนี้
ในแว่นตา AI: กิจกรรมจะปรากฏในอุปกรณ์ที่ฉายภาพ (แว่นตา) โดยสั่งให้ผู้ใช้มองโทรศัพท์เพื่อดำเนินการต่อ
ในโทรศัพท์: กิจกรรมจะเปิดขึ้นพร้อมกันในอุปกรณ์โฮสต์ (โทรศัพท์) หน้าจอนี้จะแสดงสตริงเหตุผลที่คุณระบุและให้ตัวเลือกแก่ผู้ใช้ในการดำเนินการต่อหรือยกเลิก
ในโทรศัพท์: หากผู้ใช้ยอมรับเหตุผล กล่องโต้ตอบสิทธิ์ของระบบ Android ที่แก้ไขแล้วจะปรากฏในโทรศัพท์เพื่อแจ้งให้ผู้ใช้ทราบว่าตนกำลังให้สิทธิ์สำหรับอุปกรณ์แว่นตา AI (ไม่ใช่โทรศัพท์) และผู้ใช้สามารถให้หรือปฏิเสธสิทธิ์อย่างเป็นทางการได้
การรับผลลัพธ์: หลังจากที่ผู้ใช้เลือกตัวเลือกสุดท้ายแล้ว ระบบจะปิดกิจกรรมทั้งในโทรศัพท์และแว่นตา AI จากนั้นระบบจะเรียกใช้การเรียกกลับ
ActivityResultLauncherของคุณพร้อมกับแผนที่ที่มีสถานะที่ได้รับสำหรับสิทธิ์ที่ขอแต่ละรายการ