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

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

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

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

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

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

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

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

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