การเปลี่ยนแปลงลักษณะการทำงาน: แอปที่กำหนดเป้าหมายเป็น 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 เป็นไปตามกรณีการใช้งาน 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 เปิดตัวแนวคิด "ขณะใช้งาน" สิทธิ์การเข้าถึงสำหรับ เซ็นเซอร์ร่างกาย เช่น อัตราการเต้นของหัวใจ อุณหภูมิ และเปอร์เซ็นต์ออกซิเจนในเลือด ช่วงเวลานี้ รูปแบบการเข้าถึงคล้ายกับรูปแบบที่ระบบแนะนำสำหรับ location ใน Android 10 (API ระดับ 29)

หากแอปกำหนดเป้าหมายเป็น Android 13 และต้องการเข้าถึงเซ็นเซอร์ร่างกาย ขณะทำงานในพื้นหลัง คุณต้องประกาศฟิลด์ BODY_SENSORS_BACKGROUND นอกเหนือไปจาก BODY_SENSORS สิทธิ์

ประสิทธิภาพและแบตเตอรี่

การใช้ทรัพยากรแบตเตอรี่

หากผู้ใช้วางแอปของคุณไว้ในส่วน "จำกัด" State สำหรับ การใช้งานแบตเตอรี่ในเบื้องหลัง แม้ว่าแอปกำหนดเป้าหมายเป็น Android 13 ระบบจะไม่นำส่ง BOOT_COMPLETED หรือ LOCKED_BOOT_COMPLETED จนถึง แอปเริ่มทำงานด้วยเหตุผลอื่น

ประสบการณ์ของผู้ใช้

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

หากแอปใช้ SDK ที่ประกาศสิทธิ์ AD_ID ในไลบรารี ไฟล์ Manifest แล้วสิทธิ์จะรวมกับไฟล์ Manifest ของแอปโดย "ค่าเริ่มต้น" ในกรณีนี้ คุณไม่จำเป็นต้องประกาศสิทธิ์ในส่วน manfiest

หากต้องการทราบข้อมูลเพิ่มเติม โปรดดู การโฆษณา รหัสใน ศูนย์ช่วยเหลือ Play Console

ข้อจำกัดที่ไม่ใช่ SDK ที่อัปเดต

Android 13 มีรายการอัปเดตของอุปกรณ์ที่ไม่ใช่ SDK ที่ถูกจำกัด บนการทำงานร่วมกันกับนักพัฒนาซอฟต์แวร์ Android และ การทดสอบภายใน ทุกครั้งที่เป็นไปได้ เราตรวจสอบให้แน่ใจว่าทางเลือกสาธารณะ พร้อมใช้งานก่อนที่เราจะจำกัดอินเทอร์เฟซที่ไม่ใช่ SDK

หากแอปไม่ได้กำหนดเป้าหมายเป็น Android 13 การเปลี่ยนแปลงบางอย่างเหล่านี้ อาจไม่ส่งผลกระทบต่อคุณโดยทันที อย่างไรก็ตาม แม้ว่าขณะนี้คุณสามารถใช้ อินเทอร์เฟซที่ไม่ใช่ SDK (ขึ้นอยู่กับ API เป้าหมายของแอปคุณ ระดับ) การใช้เมธอดหรือฟิลด์ที่ไม่ใช่ SDK มีความเสี่ยงสูงเสมอที่จะทำให้ แอป

หากไม่แน่ใจว่าแอปใช้อินเทอร์เฟซที่ไม่ใช่ SDK หรือไม่ คุณสามารถทดสอบ แอป เพื่อหาคำตอบ หากแอปใช้อินเทอร์เฟซที่ไม่ใช่ SDK คุณควรเริ่มวางแผน การย้ายข้อมูลไปใช้ทางเลือก SDK อย่างไรก็ตาม เราเข้าใจดีว่าบางแอป กรณีการใช้งานที่ถูกต้องสำหรับการใช้อินเทอร์เฟซที่ไม่ใช่ SDK หากไม่พบทางเลือก ในการใช้อินเทอร์เฟซที่ไม่ใช่ SDK สำหรับฟีเจอร์ในแอป คุณควรส่งคำขอ API สาธารณะใหม่

หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงใน Android รุ่นนี้ โปรดดูการอัปเดตเป็น ข้อจำกัดอินเทอร์เฟซที่ไม่ใช่ SDK ใน Android 13 ดูข้อมูลเพิ่มเติมเกี่ยวกับอินเทอร์เฟซที่ไม่ใช่ SDK โดยทั่วไปได้ที่ข้อจำกัดเกี่ยวกับ SDK ที่ไม่ใช่ SDK อินเทอร์เฟซ