การเปลี่ยนแปลงลักษณะการทํางาน: แอปที่กําหนดเป้าหมายเป็น Android 13 ขึ้นไป

Android 13 ก็มีการเปลี่ยนแปลงลักษณะการทำงานที่อาจส่งผลต่อแอปของคุณเช่นเดียวกับเวอร์ชันก่อนหน้า การเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้มีผลกับแอปที่กำหนดเป้าหมายเป็น Android 13 ขึ้นไปเท่านั้น หากแอปกำหนดเป้าหมายเป็น Android 13 ขึ้นไป คุณควรแก้ไขแอปให้รองรับลักษณะการทำงานเหล่านี้อย่างเหมาะสม (หากมี)

โปรดอ่านรายการการเปลี่ยนแปลงลักษณะการทํางานที่ส่งผลต่อแอปทั้งหมดที่ทํางานใน Android 13 ด้วย

ความเป็นส่วนตัว

สิทธิ์การแจ้งเตือนส่งผลต่อลักษณะที่ปรากฏของบริการที่ทำงานอยู่เบื้องหน้า

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

สิทธิ์รันไทม์ใหม่สำหรับอุปกรณ์ Wi-Fi ที่อยู่ใกล้เคียง

ใน Android เวอร์ชันก่อนหน้า ผู้ใช้ต้องให้สิทธิ์แอปของคุณเพื่อดำเนินการตามกรณีการใช้งาน Wi-Fi ทั่วไปหลายรายการACCESS_FINE_LOCATION

เนื่องจากผู้ใช้เชื่อมโยงสิทธิ์เข้าถึงตำแหน่งกับฟังก์ชันการทำงานของ Wi-Fi ได้ยาก Android 13 (API ระดับ 33) จึงเปิดตัวสิทธิ์รันไทม์ในกลุ่มสิทธิ์ NEARBY_DEVICES สำหรับแอปที่จัดการการเชื่อมต่อของอุปกรณ์กับจุดเข้าใช้งานใกล้เคียงผ่าน Wi-Fi สิทธิ์นี้ NEARBY_WIFI_DEVICES ตอบสนอง Use Case ของ Wi-Fi เช่น

  • ค้นหาหรือเชื่อมต่อกับอุปกรณ์ที่อยู่ใกล้เคียง เช่น เครื่องพิมพ์หรืออุปกรณ์แคสต์สื่อ เวิร์กโฟลว์นี้ช่วยให้แอปของคุณทำงานประเภทต่อไปนี้ได้
    • รับข้อมูล AP นอกย่านความถี่ เช่น ผ่าน BLE
    • ค้นหาและเชื่อมต่อกับอุปกรณ์ผ่าน Wi-Fi Aware และเชื่อมต่อโดยใช้ฮอตสปอตในพื้นที่เท่านั้น
    • ค้นหาและเชื่อมต่อกับอุปกรณ์ผ่าน Wi-Fi Direct
  • เริ่มเชื่อมต่อกับ SSID ที่รู้จัก เช่น รถยนต์หรืออุปกรณ์สมาร์ทโฮม
  • เริ่มฮอตสปอตในพื้นที่เท่านั้น
  • ระยะสัญญาณของอุปกรณ์ Wi-Fi Aware ที่อยู่ใกล้เคียง

ตราบใดที่แอปไม่ได้ดึงข้อมูลตำแหน่งทางกายภาพจาก Wi-Fi API ให้ขอ NEARBY_WIFI_DEVICES แทน ACCESS_FINE_LOCATION เมื่อกำหนดเป้าหมายเป็น Android 13 ขึ้นไปและใช้ Wi-Fi API เมื่อคุณประกาศสิทธิ์ NEARBY_WIFI_DEVICES ให้ยืนยันว่าแอปของคุณไม่เคยดึงข้อมูลตำแหน่งทางกายภาพจาก Wi-Fi API โดยตั้งค่าแอตทริบิวต์ android:usesPermissionFlags เป็น neverForLocation กระบวนการนี้คล้ายกับที่คุณทำใน Android 12 (API ระดับ 31) ขึ้นไปเมื่อคุณยืนยันว่าไม่เคยใช้ข้อมูลอุปกรณ์บลูทูธเพื่อระบุตำแหน่ง

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีขอสิทธิ์เข้าถึงอุปกรณ์ Wi-Fi ที่อยู่ใกล้เคียง

สิทธิ์ของสื่อแบบละเอียด

ปุ่ม 2 ปุ่มสำหรับกล่องโต้ตอบจากบนลงล่างคือ "อนุญาต" และ "ไม่อนุญาต"
รูปที่ 1 กล่องโต้ตอบสิทธิ์ของระบบที่ผู้ใช้เห็นเมื่อคุณขอสิทธิ์ READ_MEDIA_AUDIO

หากแอปกำหนดเป้าหมายเป็น Android 13 ขึ้นไปและจำเป็นต้องเข้าถึงไฟล์สื่อที่แอปอื่นๆ สร้างขึ้น คุณต้องขอสิทธิ์สื่อแบบละเอียดต่อไปนี้อย่างน้อย 1 สิทธิ์แทนสิทธิ์ READ_EXTERNAL_STORAGE

ประเภทสื่อ สิทธิ์ในการขอ
รูปภาพและภาพถ่าย READ_MEDIA_IMAGES
วิดีโอ READ_MEDIA_VIDEO
ไฟล์เสียง READ_MEDIA_AUDIO

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

รูปที่ 1 แสดงแอปที่ขอสิทธิ์ READ_MEDIA_AUDIO

หากคุณขอสิทธิ์ READ_MEDIA_IMAGES และสิทธิ์ READ_MEDIA_VIDEO พร้อมกัน กล่องโต้ตอบสิทธิ์ของระบบจะปรากฏขึ้นเพียงรายการเดียว

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

adb shell cmd appops get --uid PACKAGE_NAME

การใช้เซ็นเซอร์ร่างกายในเบื้องหลังต้องใช้สิทธิ์ใหม่

Android 13 เปิดตัวแนวคิดการเข้าถึง "ขณะใช้งาน" สำหรับเซ็นเซอร์ร่างกาย เช่น อัตราการเต้นของหัวใจ อุณหภูมิ และเปอร์เซ็นต์ออกซิเจนในเลือด รูปแบบการเข้าถึงนี้คล้ายกับรูปแบบที่ระบบเปิดตัวสำหรับตำแหน่งใน Android 10 (API ระดับ 29)

หากแอปกำหนดเป้าหมายเป็น Android 13 และต้องเข้าถึงข้อมูลเซ็นเซอร์ร่างกายขณะทำงานอยู่เบื้องหลัง คุณต้องประกาศสิทธิ์ BODY_SENSORS_BACKGROUND ใหม่นอกเหนือจากสิทธิ์ BODY_SENSORS ที่มีอยู่

ประสิทธิภาพและแบตเตอรี่

การใช้ทรัพยากรแบตเตอรี่

หากผู้ใช้นำแอปของคุณไปไว้ในสถานะ "ถูกจำกัด" สำหรับการใช้งานแบตเตอรี่อยู่เบื้องหลังขณะที่แอปกำหนดเป้าหมายเป็น Android 13 ระบบจะไม่ส่งการออกอากาศ BOOT_COMPLETED หรือการออกอากาศ LOCKED_BOOT_COMPLETED จนกว่าแอปจะเริ่มต้นขึ้นด้วยเหตุผลอื่นๆ

ประสบการณ์ของผู้ใช้

การควบคุมสื่อที่ได้รับมาจาก PlaybackState

สำหรับแอปที่กำหนดเป้าหมายเป็น Android 13 (API ระดับ 33) ขึ้นไป ระบบจะดึงการควบคุมสื่อมาจากการดำเนินการ PlaybackState ซึ่งจะช่วยให้ระบบแสดงชุดการควบคุมที่สมบูรณ์ยิ่งขึ้นซึ่งมีความสอดคล้องกันทางเทคนิคระหว่างอุปกรณ์โทรศัพท์และแท็บเล็ต รวมถึงสอดคล้องกับวิธีแสดงผลตัวควบคุมสื่อบนแพลตฟอร์ม Android อื่นๆ เช่น Android Auto และ Android TV

รูปที่ 2 แสดงตัวอย่างลักษณะของโฆษณานี้ในอุปกรณ์โทรศัพท์และแท็บเล็ตตามลำดับ

การควบคุมสื่อในแง่ลักษณะที่ปรากฏบนอุปกรณ์โทรศัพท์และแท็บเล็ต โดยแสดงตัวอย่างแทร็กซึ่งแสดงให้เห็นลักษณะที่ปุ่มอาจปรากฏ
รูปที่ 2: การควบคุมสื่อในอุปกรณ์โทรศัพท์และแท็บเล็ต

ก่อน Android 13 ระบบจะแสดงการดำเนินการจากMediaStyleการแจ้งเตือนได้สูงสุด 5 รายการตามลำดับที่เพิ่ม ในโหมดกะทัดรัด เช่น ในการตั้งค่าด่วนแบบยุบ ระบบจะแสดงการดำเนินการที่ระบุด้วย setShowActionsInCompactView() ได้สูงสุด 3 รายการ

ตั้งแต่ Android 13 เป็นต้นไป ระบบจะแสดงปุ่มการดำเนินการได้สูงสุด 5 ปุ่มตาม PlaybackState ตามที่อธิบายไว้ในตารางต่อไปนี้ ในโหมดกะทัดรัด ระบบจะแสดงเฉพาะช่องการกระทํา 3 ช่องแรก สำหรับแอปที่ไม่ได้กำหนดเป้าหมายเป็น Android 13 หรือแอปที่ไม่มี PlaybackState ระบบจะแสดงการควบคุมตามรายการ Action ที่เพิ่มลงในการแจ้งเตือน MediaStyle ตามที่อธิบายไว้ในย่อหน้าก่อนหน้า

สล็อต การทำงาน เกณฑ์
1 เล่น สถานะปัจจุบันของ PlaybackState เป็นหนึ่งในสถานะต่อไปนี้
  • STATE_NONE
  • STATE_STOPPED
  • STATE_PAUSED
  • STATE_ERROR
ไอคอนหมุนขณะโหลด สถานะปัจจุบันของ PlaybackState เป็นหนึ่งในสถานะต่อไปนี้
  • STATE_CONNECTING
  • STATE_BUFFERING
หยุดชั่วคราว สถานะปัจจุบันของ PlaybackState ไม่ใช่รายการใดข้างต้น
2 ก่อนหน้า PlaybackState actions รวม ACTION_SKIP_TO_PREVIOUS
กำหนดเอง PlaybackState การดําเนินการไม่รวม ACTION_SKIP_TO_PREVIOUS และ PlaybackState การดําเนินการแบบกําหนดเองรวมการดําเนินการแบบกําหนดเองที่ยังไม่ได้วาง
ว่าง PlaybackState extras มีค่าบูลีน true สำหรับคีย์ SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV
3 ถัดไป PlaybackState actions รวม ACTION_SKIP_TO_NEXT
กำหนดเอง PlaybackState การดําเนินการไม่รวม ACTION_SKIP_TO_NEXT และ PlaybackState การดําเนินการแบบกําหนดเองรวมการดําเนินการแบบกําหนดเองที่ยังไม่ได้วาง
ว่าง PlaybackState extras มีค่าบูลีน true สำหรับคีย์ SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_NEXT
4 กำหนดเอง PlaybackState การดําเนินการแบบกําหนดเองมีการดำเนินการแบบกำหนดเองที่ยังไม่ได้วาง
5 กำหนดเอง PlaybackState การดําเนินการแบบกําหนดเองมีการดำเนินการแบบกำหนดเองที่ยังไม่ได้วาง

การทำงานที่กำหนดเองจะอยู่ในลำดับที่เพิ่มลงใน PlaybackState

ธีมสีของแอปที่ใช้กับเนื้อหา WebView โดยอัตโนมัติ

สำหรับแอปที่กำหนดเป้าหมายเป็น Android 13 (API ระดับ 33) ขึ้นไป เราจะเลิกใช้งานวิธี setForceDark() ซึ่งจะส่งผลให้การดำเนินการไม่เกิดขึ้นหากมีการเรียกใช้วิธีดังกล่าว

แต่ตอนนี้ WebView จะตั้งค่าข้อความค้นหาสื่อ prefers-color-scheme ตามแอตทริบิวต์ธีมของแอป isLightTheme เสมอ กล่าวคือ หาก isLightTheme เป็น true หรือไม่ระบุ prefers-color-scheme จะเท่ากับ light มิเช่นนั้น prefers-color-scheme จะเท่ากับ dark ลักษณะการทํางานนี้หมายความว่าระบบจะใช้สไตล์แบบสว่างหรือแบบมืดของเนื้อหาเว็บโดยอัตโนมัติเพื่อให้เข้ากับธีมของแอป หากเนื้อหารองรับ

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

หากยังต้องการปรับแต่งลักษณะการทำงานของธีมสีของแอป ให้ใช้วิธี setAlgorithmicDarkeningAllowed() แทน เพื่อความเข้ากันได้แบบย้อนหลังกับ Android เวอร์ชันก่อนหน้า เราขอแนะนำให้ใช้เมธอด setAlgorithmicDarkeningAllowed() ที่เทียบเท่าใน AndroidX

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

การเชื่อมต่อ

เลิกใช้งาน BluetoothAdapter#enable() และ BluetoothAdapter#disable()

สําหรับแอปที่กําหนดเป้าหมายเป็น Android 13 (API ระดับ 33) ขึ้นไป ระบบจะเลิกใช้งานเมธอด BluetoothAdapter#enable() และ BluetoothAdapter#disable() และจะแสดงผลเป็น false เสมอ

แอปประเภทต่อไปนี้จะได้รับการยกเว้นจากการเปลี่ยนแปลงเหล่านี้

  • แอปเจ้าของอุปกรณ์
  • แอปของเจ้าของโปรไฟล์
  • แอประบบ

บริการ Google Play

ต้องขอสิทธิ์สําหรับรหัสโฆษณา

แอปที่ใช้รหัสโฆษณาของบริการ Google Play และกำหนดเป้าหมายเป็น Android 13 (API ระดับ 33) ขึ้นไปต้องประกาศสิทธิ์ทั่วไป AD_ID ในไฟล์ Manifest ของแอป ดังนี้

<manifest ...>
    <!-- Required only if your app targets Android 13 or higher. -->
    <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>

    <application ...>
        ...
    </application>
</manifest>

หากแอปไม่ได้ประกาศสิทธิ์นี้เมื่อกำหนดเป้าหมายเป็น Android 13 ขึ้นไป ระบบจะนำรหัสโฆษณาออกโดยอัตโนมัติและแทนที่ด้วยสตริงเลข 0

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

ดูข้อมูลเพิ่มเติมได้ที่รหัสโฆษณาในศูนย์ช่วยเหลือของ Play Console

ข้อจำกัดที่ไม่ใช่ SDK ที่อัปเดตแล้ว

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

หากแอปไม่ได้กำหนดเป้าหมายเป็น Android 13 การเปลี่ยนแปลงบางอย่างเหล่านี้อาจไม่ส่งผลต่อคุณในทันที อย่างไรก็ตาม แม้ว่าปัจจุบันคุณจะใช้อินเทอร์เฟซที่ไม่ใช่ SDK บางรายการได้ (ขึ้นอยู่กับระดับ API เป้าหมายของแอป) แต่การใช้เมธอดหรือฟิลด์ที่ไม่ใช่ SDK นั้นมักมีความเสี่ยงสูงที่จะทำให้แอปขัดข้อง

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงใน Android เวอร์ชันนี้ได้ที่การอัปเดตข้อจำกัดอินเทอร์เฟซที่ไม่ใช่ SDK ใน Android 13 ดูข้อมูลเพิ่มเติมเกี่ยวกับอินเทอร์เฟซที่ไม่ใช่ SDK โดยทั่วไปได้ที่ข้อจำกัดเกี่ยวกับอินเทอร์เฟซที่ไม่ใช่ SDK