การเปลี่ยนแปลงลักษณะการทํางาน: แอปที่กําหนดเป้าหมายเป็น 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 จะตอบโจทย์ 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 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 การดำเนินการรวมถึงACTION_SKIP_TO_PREVIOUS
กำหนดเอง PlaybackState การกระทำไม่มี ACTION_SKIP_TO_PREVIOUS และPlaybackState การกระทำที่กำหนดเองมีการกระทำที่กำหนดเองที่ยังไม่ได้วาง
ว่าง PlaybackState extras มีtrueค่าบูลีนสำหรับคีย์ SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV
3 ถัดไป PlaybackState การดำเนินการรวมถึง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 มิเช่นนั้นจะเป็น 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