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 ที่อยู่ใกล้เคียง
ตราบใดที่แอปไม่ได้ดึงข้อมูลตำแหน่งทางกายภาพจาก API ของ Wi-Fi ให้ขอ NEARBY_WIFI_DEVICES แทน ACCESS_FINE_LOCATION เมื่อคุณกำหนดเป้าหมายเป็น Android 13 ขึ้นไปและใช้ API ของ Wi-Fi เมื่อประกาศสิทธิ์ NEARBY_WIFI_DEVICES ให้ยืนยันอย่างหนักแน่นว่าแอปของคุณไม่เคยรับข้อมูลตำแหน่งทางกายภาพจาก Wi-Fi API โดยตั้งค่าแอตทริบิวต์ android:usesPermissionFlags เป็น neverForLocation กระบวนการนี้คล้ายกับกระบวนการที่คุณทำใน Android 12 (API ระดับ 31) ขึ้นไปเมื่อคุณยืนยันว่าข้อมูลอุปกรณ์บลูทูธจะไม่ถูกใช้เพื่อระบุตำแหน่ง
ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีขอสิทธิ์เข้าถึงอุปกรณ์ Wi-Fi ที่อยู่ใกล้เคียง
สิทธิ์ของสื่อแบบละเอียด
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 หรือการออกอากาศ LOCKED_BOOT_COMPLETED จนกว่าแอปจะเริ่มทำงานด้วยเหตุผลอื่นๆ
ประสบการณ์ของผู้ใช้
ตัวควบคุมสื่อที่ได้รับมาจาก PlaybackState
สำหรับแอปที่กำหนดเป้าหมายเป็น Android 13 (ระดับ API 33) ขึ้นไป ระบบจะดึงข้อมูลตัวควบคุมสื่อจากการดำเนินการ PlaybackState ซึ่งช่วยให้ระบบแสดงชุดตัวควบคุมที่สมบูรณ์ยิ่งขึ้นซึ่งมีความสอดคล้องกันในทางเทคนิคระหว่างโทรศัพท์และแท็บเล็ต และยังสอดคล้องกับวิธีแสดงผลตัวควบคุมสื่อในแพลตฟอร์ม Android อื่นๆ เช่น Android Auto และ Android TV ด้วย
รูปที่ 2 แสดงตัวอย่างลักษณะของโฆษณาในโทรศัพท์และแท็บเล็ตตามลำดับ
ก่อน Android 13 ระบบจะแสดงการดำเนินการสูงสุด 5 รายการจากการแจ้งเตือน MediaStyle ตามลำดับที่เพิ่ม
ในโหมดกะทัดรัด เช่น ในการตั้งค่าด่วนที่ยุบ ระบบจะแสดงการดำเนินการสูงสุด 3 รายการที่ระบุด้วย setShowActionsInCompactView()
ตั้งแต่ 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 รายการมีการกระทำที่กำหนดเองซึ่งยังไม่ได้วาง |
|
| ว่าง | extras ของ PlaybackState มีค่าบูลีน true สำหรับคีย์ SESSION_EXTRAS_KEY_SLOT_RESERVATION_SKIP_TO_PREV |
|
| 3 | ถัดไป | การดำเนินการของ PlaybackState ได้แก่ ACTION_SKIP_TO_NEXT |
| กำหนดเอง | การดำเนินการ PlaybackState รายการไม่มี ACTION_SKIP_TO_NEXT และการกระทำที่กำหนดเอง PlaybackState รายการมีการกระทำที่กำหนดเองซึ่งยังไม่ได้วาง |
|
| ว่าง | extras ของ 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