เช่นเดียวกับรุ่นก่อนหน้านี้ 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 ที่อยู่ใกล้เคียง
สิทธิ์ของสื่อแบบละเอียด
หากแอปกำหนดเป้าหมายเป็น 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 แสดงตัวอย่างลักษณะของโฆษณานี้ในอุปกรณ์โทรศัพท์และแท็บเล็ตตามลำดับ
ก่อน Android 13 ระบบจะแสดงการดำเนินการจากMediaStyle
การแจ้งเตือนได้สูงสุด 5 รายการตามลำดับที่เพิ่ม
ในโหมดกะทัดรัด เช่น ในการตั้งค่าด่วนแบบยุบ ระบบจะแสดงการดำเนินการที่ระบุด้วย setShowActionsInCompactView()
ได้สูงสุด 3 รายการ
ใน Android 13 เป็นต้นไป ระบบจะแสดงปุ่มการทำงานสูงสุด 5 ปุ่มตาม PlaybackState
ตามที่อธิบายไว้ในตารางต่อไปนี้ ในโหมดกะทัดรัด ระบบจะแสดงเฉพาะช่องการกระทํา 3 ช่องแรก สำหรับแอปที่ไม่ได้กำหนดเป้าหมายเป็น Android 13 หรือแอปที่ไม่มี PlaybackState
ระบบจะแสดงการควบคุมตามรายการ Action
ที่เพิ่มลงในการแจ้งเตือน MediaStyle
ตามที่อธิบายไว้ในย่อหน้าก่อนหน้า
สล็อต | การทำงาน | เกณฑ์ |
---|---|---|
1 | เล่น |
สถานะปัจจุบันของ PlaybackState เป็นอย่างใดอย่างหนึ่งต่อไปนี้
|
ไอคอนหมุนขณะโหลด |
สถานะปัจจุบันของ PlaybackState เป็นหนึ่งในสถานะต่อไปนี้
|
|
หยุดชั่วคราว | สถานะปัจจุบันของ 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