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

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

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

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

  • รอจนกว่าผู้ใช้จะให้สิทธิ์ 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 ของแอปชั่วคราว ระบบจึงได้แนะนำเมธอด getPrivacyIndicatorBounds() เพื่อช่วยปรับ UI ให้เข้ากับสัญญาณบอกสถานะเหล่านี้ ซึ่งข้อมูลโค้ดต่อไปนี้จะแสดงให้เห็น การใช้ 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 หรือจากหน้าจอความเป็นส่วนตัวในการตั้งค่าระบบ

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

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

ตรวจสอบอุปกรณ์ที่รองรับ

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

Kotlin

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

Java

SensorPrivacyManager sensorPrivacyManager = getApplicationContext()
        .getSystemService(SensorPrivacyManager.class);
boolean supportsMicrophoneToggle = sensorPrivacyManager
        .supportsSensorToggle(Sensors.MICROPHONE);
boolean supportsCameraToggle = sensorPrivacyManager
        .supportsSensorToggle(Sensors.CAMERA);