การเปลี่ยนแปลงลักษณะการทํางาน: แอปที่กําหนดเป้าหมายเป็น 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 Broadcast หรือ LOCKED_BOOT_COMPLETED Broadcast จนกว่าจะมีการเริ่มแอปด้วยเหตุผลอื่นๆ

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

ส่วนควบคุมสื่อที่ได้รับมาจาก 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 เล่น สถานะปัจจุบันของ 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 จะตั้งค่า Media Query 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