เช่นเดียวกับรุ่นก่อนหน้านี้ 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 ที่อยู่ใกล้เคียง
สิทธิ์ของสื่อแบบละเอียด
หากแอปกำหนดเป้าหมายเป็น 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