อธิบายการเข้าถึงข้อมูลที่ละเอียดอ่อนยิ่งขึ้น

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

ฟีเจอร์ของระบบที่รักษาความเป็นส่วนตัวเหล่านี้ไม่ควรส่งผลต่อวิธีที่แอปจัดการสิทธิ์ที่เกี่ยวข้องกับตำแหน่ง ไมโครโฟน และกล้อง ตราบใดที่คุณปฏิบัติตามแนวทางปฏิบัติแนะนำด้านความเป็นส่วนตัว

โดยเฉพาะอย่างยิ่ง โปรดตรวจสอบว่าคุณทำสิ่งต่อไปนี้ในแอป

  • รอให้ผู้ใช้เข้าถึงกล้องของอุปกรณ์จนกว่าผู้ใช้จะให้สิทธิ์ CAMERA สิทธิ์ในแอปของคุณ
  • รอเข้าถึงไมโครโฟนของอุปกรณ์จนกว่าผู้ใช้จะให้สิทธิ์ RECORD_AUDIO แก่แอป
  • รอจนกว่าผู้ใช้จะโต้ตอบกับฟีเจอร์ในแอปที่ต้องใช้ตำแหน่งก่อนที่คุณขอสิทธิ์ ACCESS_COARSE_LOCATION หรือสิทธิ์ ACCESS_FINE_LOCATION ตามที่อธิบายไว้ในคู่มือเกี่ยวกับวิธีขอสิทธิ์เข้าถึงตำแหน่ง
  • รอจนกว่าผู้ใช้จะให้สิทธิ์แอป ACCESS_COARSE_LOCATION หรือสิทธิ์ ACCESS_FINE_LOCATION ก่อนที่คุณจะส่งคำขอ ACCESS_BACKGROUND_LOCATION สิทธิ์

แดชบอร์ดความเป็นส่วนตัว

ไทม์ไลน์แนวตั้งจะแสดงแอปต่างๆ ที่เข้าถึงข้อมูลตำแหน่งและเวลาที่เข้าถึง
รูปที่ 1 หน้าจอการใช้งานตำแหน่ง ซึ่งเป็นส่วนหนึ่งของแดชบอร์ดความเป็นส่วนตัว

ในอุปกรณ์ที่รองรับซึ่งใช้ Android 12 ขึ้นไป หน้าจอแดชบอร์ดความเป็นส่วนตัวจะปรากฏในการตั้งค่าระบบ ในหน้าจอนี้ ผู้ใช้จะเข้าถึงได้ หน้าจอแยกต่างหากที่จะแสดงเมื่อแอปเข้าถึงตำแหน่ง กล้อง และไมโครโฟน แต่ละหน้าจอจะแสดงไทม์ไลน์ของเวลาที่แอปต่างๆ ได้เข้าถึง ข้อมูลบางประเภท รูปที่ 1 แสดงลำดับเวลาการเข้าถึงข้อมูลตำแหน่ง

แสดงเหตุผลในการเข้าถึงข้อมูล

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

หากต้องการอธิบายเหตุผลที่แอปเข้าถึงข้อมูลตำแหน่ง กล้อง และไมโครโฟน ให้ทำดังนี้ ทำตามขั้นตอนต่อไปนี้

  1. เพิ่มกิจกรรมที่เมื่อเริ่มต้นแล้วจะให้เหตุผลที่อธิบายว่าเหตุใดแอปของคุณจึงดําเนินการเข้าถึงข้อมูลประเภทหนึ่งๆ ภายในกิจกรรมนี้ ให้ตั้งค่า แอตทริบิวต์ของ android:permission เป็น START_VIEW_PERMISSION_USAGE

    หากแอปกำหนดเป้าหมายเป็น Android 12 ขึ้นไป คุณต้องกำหนดค่าสำหรับแอตทริบิวต์ android:exported อย่างชัดเจน

  2. เพิ่มตัวกรอง Intent ต่อไปนี้ในกิจกรรมที่เพิ่มใหม่

    <!-- android:exported required if you target Android 12. -->
    <activity android:name=".DataAccessRationaleActivity"
              android:permission="android.permission.START_VIEW_PERMISSION_USAGE"
              android:exported="true">
           <!-- VIEW_PERMISSION_USAGE shows a selectable information icon on
                your app permission's page in system settings.
                VIEW_PERMISSION_USAGE_FOR_PERIOD shows a selectable information
                icon on the Privacy Dashboard screen. -->
        <intent-filter>
           <action android:name="android.intent.action.VIEW_PERMISSION_USAGE" />
           <action android:name="android.intent.action.VIEW_PERMISSION_USAGE_FOR_PERIOD" />
           <category android:name="android.intent.category.DEFAULT" />
           ...
        </intent-filter>
    </activity>
  3. เลือกว่ากิจกรรมเหตุผลในการเข้าถึงข้อมูลควรแสดงข้อมูลใด เช่น คุณอาจแสดงเว็บไซต์ของแอปหรือบทความในศูนย์ช่วยเหลือ หากต้องการอธิบายเพิ่มเติมเกี่ยวกับประเภทข้อมูลที่แอปเข้าถึง รวมถึงเวลาที่เข้าถึง ให้จัดการข้อมูลเสริมที่ระบบรวมไว้เมื่อเรียกใช้ Intent การใช้งานสิทธิ์ ดังนี้

    • หากระบบเรียกใช้ ACTION_VIEW_PERMISSION_USAGE แอปจะทำสิ่งต่อไปนี้ได้ ดึงค่าสำหรับ EXTRA_PERMISSION_GROUP_NAME
    • หากระบบเรียกใช้ ACTION_VIEW_PERMISSION_USAGE_FOR_PERIOD แอปของคุณ สามารถดึงค่าสำหรับ EXTRA_PERMISSION_GROUP_NAME EXTRA_ATTRIBUTION_TAGS, EXTRA_START_TIME และ EXTRA_END_TIME

ผู้ใช้จะเห็นไอคอนข้อมูล โดยขึ้นอยู่กับตัวกรอง Intent ที่คุณเพิ่ม ข้างชื่อแอปในบางหน้าจอ

  • หากคุณเพิ่มตัวกรอง Intent ที่มี VIEW_PERMISSION_USAGE การดำเนินการ ผู้ใช้จะเห็นไอคอนในหน้าสิทธิ์ของแอปในการตั้งค่าระบบ คุณ สามารถนำการดำเนินการนี้ไปใช้กับสิทธิ์รันไทม์ทั้งหมด
  • หากคุณเพิ่มตัวกรอง Intent ที่มีการดำเนินการ VIEW_PERMISSION_USAGE_FOR_PERIOD ผู้ใช้จะเห็นไอคอนข้างชื่อแอปทุกครั้งที่แอปปรากฏในหน้าจอแดชบอร์ดความเป็นส่วนตัว

เมื่อผู้ใช้เลือกไอคอนดังกล่าว ระบบจะเริ่มกิจกรรมเหตุผลของแอป

สี่เหลี่ยมผืนผ้าที่โค้งมนที่มุมขวาบน ซึ่งประกอบด้วยไอคอนกล้องและไอคอนไมโครโฟน
รูปที่ 2 สัญญาณบอกสถานะไมโครโฟนและกล้อง ซึ่งแสดง เข้าถึงข้อมูลล่าสุด

สัญญาณบอกสถานะ

ในอุปกรณ์ที่ใช้ Android 12 ขึ้นไป เมื่อแอปเข้าถึงไมโครโฟนหรือกล้อง ไอคอนจะปรากฏในแถบสถานะ หากแอปอยู่ใน โหมดใหญ่พิเศษ ไอคอนจะปรากฏใน ที่มุมขวาบนของหน้าจอ ผู้ใช้สามารถเปิดการตั้งค่าด่วนแล้วเลือกไอคอนเพื่อดูว่าแอปใดกำลังใช้ไมโครโฟนหรือกล้องอยู่ รูปที่ 2 แสดงตัวอย่างภาพหน้าจอที่มีไอคอนต่างๆ

ระบุตําแหน่งบนหน้าจอของไฟบอกสถานะ

หากแอปรองรับโหมดสมจริงหรือ UI แบบเต็มหน้าจอ ตัวบ่งชี้อาจซ้อนทับ UI ของแอปเป็นระยะเวลาสั้นๆ เพื่อช่วยปรับ UI ให้สอดคล้องกับสัญญาณบอกสถานะเหล่านี้ ระบบจะแนะนำ getPrivacyIndicatorBounds() ซึ่งข้อมูลโค้ดต่อไปนี้จะแสดงขึ้นมา การใช้ API นี้จะช่วยให้คุณระบุขอบเขตที่ตัวบ่งชี้อาจปรากฏได้ จากนั้นคุณอาจเลือกที่จะ จัดระเบียบ UI ของหน้าจอให้แตกต่างกัน

Kotlin
view.setOnApplyWindowInsetsListener { view, windowInsets ->
    val indicatorBounds = windowInsets.getPrivacyIndicatorBounds()
    // change your UI to avoid overlapping
    windowInsets
}

สลับ

การ์ดการตั้งค่าด่วนจะมีป้ายกํากับว่า &quot;การเข้าถึงกล้อง&quot; และ
         &quot;การเข้าถึงไมค์&quot;
รูปที่ 3 เปิด/ปิดไมโครโฟนและกล้อง การตั้งค่าด่วน

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

ปุ่มเปิด/ปิดกล้องและไมโครโฟนจะส่งผลต่อแอปทั้งหมดในอุปกรณ์ ดังนี้

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

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

ตรวจสอบการรองรับอุปกรณ์

หากต้องการตรวจสอบว่าอุปกรณ์รองรับการปิด/เปิดไมโครโฟนและกล้องหรือไม่ ให้เพิ่มตรรกะที่ปรากฏในข้อมูลโค้ดต่อไปนี้

KotlinJava
val sensorPrivacyManager = applicationContext
        .getSystemService(SensorPrivacyManager::class.java)
        as SensorPrivacyManager
val supportsMicrophoneToggle = sensorPrivacyManager
        .supportsSensorToggle(Sensors.MICROPHONE)
val supportsCameraToggle = sensorPrivacyManager
        .supportsSensorToggle(Sensors.CAMERA)
SensorPrivacyManager sensorPrivacyManager = getApplicationContext()
        .getSystemService(SensorPrivacyManager.class);
boolean supportsMicrophoneToggle = sensorPrivacyManager
        .supportsSensorToggle(Sensors.MICROPHONE);
boolean supportsCameraToggle = sensorPrivacyManager
        .supportsSensorToggle(Sensors.CAMERA);