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 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 จะตั้งค่าข้อความค้นหาสื่อ 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