การเปลี่ยนแปลงลักษณะการทํางาน: แอปที่กําหนดเป้าหมายเป็น 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 ระบบจะแสดงการทำงานสูงสุด 5 รายการจากการแจ้งเตือน MediaStyle ตามลำดับที่เพิ่ม ในโหมดกะทัดรัด เช่น ในการตั้งค่าด่วนที่ยุบอยู่ ระบบจะแสดงการทำงานสูงสุด 3 รายการที่ระบุด้วย setShowActionsInCompactView()

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

สล็อต การทำงาน เกณฑ์
1 Google Play สถานะปัจจุบันของ 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 ส่วนเพิ่มเติม มีค่าบูลีน true สำหรับคีย์ SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV
3 ถัดไป PlaybackState การทำงาน มี ACTION_SKIP_TO_NEXT.
กำหนดเอง PlaybackState การทำงาน ไม่มี ACTION_SKIP_TO_NEXT และ PlaybackState การทำงานที่กำหนดเอง มีการทำงานที่กำหนดเองซึ่งยังไม่ได้วาง
ว่าง PlaybackState ส่วนเพิ่มเติม มีค่าบูลีน true สำหรับคีย์ SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_NEXT
4 กำหนดเอง PlaybackState การทำงานที่กำหนดเอง ของ `PlaybackState` มีการทำงานที่กำหนดเองซึ่งยังไม่ได้วาง
5 กำหนดเอง PlaybackState การทำงานที่กำหนดเอง ของ `PlaybackState` มีการทำงานที่กำหนดเองซึ่งยังไม่ได้วาง

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

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

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

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

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

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

ดูเอกสารประกอบของเมธอดดังกล่าวเพื่อดูข้อมูลเพิ่มเติมเกี่ยวกับลักษณะการทำงานที่คุณคาดหวังได้ในแอป ทั้งนี้ขึ้นอยู่กับ 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 ขึ้นไป ระบบจะนำรหัสโฆษณาออกและแทนที่ด้วยสตริงเลขศูนย์โดยอัตโนมัติ

หากแอปใช้ 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