เช่นเดียวกับรุ่นก่อนๆ Android 17 มีการเปลี่ยนแปลงลักษณะการทำงานที่อาจส่งผลต่อแอปของคุณ การเปลี่ยนแปลงลักษณะการทำงานต่อไปนี้จะมีผลเฉพาะกับแอปที่กำหนดเป้าหมายเป็น Android 17 ขึ้นไป หากแอปกำหนดเป้าหมายเป็น Android 17 ขึ้นไป คุณควรแก้ไขแอปให้รองรับลักษณะการทำงานเหล่านี้ในกรณีที่เกี่ยวข้อง
นอกจากนี้ โปรดตรวจสอบรายการการเปลี่ยนแปลงลักษณะการทำงานที่มีผลกับแอปทั้งหมด
ที่ทำงานบน Android 17 ไม่ว่าtargetSdkVersionของแอปจะเป็นอย่างไร
ประสบการณ์ของผู้ใช้และ UI ของระบบ
Android 17 มีการเปลี่ยนแปลงต่อไปนี้ซึ่งมีจุดประสงค์เพื่อสร้างประสบการณ์ของผู้ใช้ที่สอดคล้องกันและใช้งานง่ายยิ่งขึ้น
วิดเจ็ตขีดจำกัดหน่วยความจำ
ตั้งแต่ Android 17 เป็นต้นไป สำหรับแอปที่กำหนดเป้าหมายเป็น Android 17 (ระดับ API 37) ขึ้นไป ระบบจะบังคับใช้ขีดจำกัดหน่วยความจำที่เข้มงวด (1.5 * ความกว้างของหน้าจอ * ความสูงของหน้าจอ * 4) กับการใช้งานหน่วยความจำรวมของทั้งบิตแมปและไอคอนที่อยู่ในพัสดุ RemoteViews การเกินขีดจำกัดเหล่านี้จะทำให้เกิดข้อผิดพลาดร้ายแรง IllegalArgumentException และทำให้กระบวนการของแอปขัดข้อง
ดูข้อมูลเพิ่มเติมได้ที่ UpdateAppWidget
ฟังก์ชันหลัก
Android 17 มีการเปลี่ยนแปลงต่อไปนี้ซึ่งแก้ไขหรือ ขยายความสามารถหลักต่างๆ ของระบบ Android
การติดตั้งใช้งาน MessageQueue แบบใหม่ที่ไม่มีการล็อก
ตั้งแต่ Android 17 เป็นต้นไป แอปที่กำหนดเป้าหมายเป็น Android 17 (ระดับ API 37)
ขึ้นไปจะได้รับการใช้งาน
android.os.MessageQueue แบบใหม่ที่ไม่มีการล็อก การใช้งานแบบใหม่นี้ช่วยปรับปรุงประสิทธิภาพและลดเฟรมที่พลาดไป แต่ก็อาจทำให้ไคลเอ็นต์ที่ใช้การสะท้อนข้อมูลในฟิลด์และเมธอดส่วนตัวของ MessageQueue ใช้งานไม่ได้
ดูข้อมูลเพิ่มเติม รวมถึงกลยุทธ์การลดผลกระทบได้ที่MessageQueue คำแนะนำเกี่ยวกับการเปลี่ยนแปลงลักษณะการทำงาน
ตอนนี้ฟิลด์สุดท้ายแบบคงที่แก้ไขไม่ได้แล้ว
แอปที่ทำงานบน Android 17 ขึ้นไปซึ่งกำหนดเป้าหมายเป็น Android 17 (ระดับ API 37) ขึ้นไปจะเปลี่ยนช่อง static final ไม่ได้ หากแอปพยายามเปลี่ยนช่อง static final โดยใช้การสะท้อน ระบบจะแสดง IllegalAccessException การพยายามแก้ไขช่องใดช่องหนึ่งผ่าน JNI API (เช่น SetStaticLongField()) จะทำให้แอปขัดข้อง
การช่วยเหลือพิเศษ
Android 17 มีการเปลี่ยนแปลงต่อไปนี้เพื่อปรับปรุงการช่วยเหลือพิเศษ
การรองรับการช่วยเหลือพิเศษสำหรับการพิมพ์ด้วยแป้นพิมพ์จริงของ IME ที่ซับซ้อน
ฟีเจอร์นี้จะเปิดตัว API ใหม่ AccessibilityEvent และ TextAttribute
เพื่อปรับปรุงการอธิบายและอ่านออกเสียงของโปรแกรมอ่านหน้าจอสำหรับการป้อนข้อมูลภาษา CJKV ตอนนี้แอป CJKV IME
สามารถส่งสัญญาณได้ว่ามีการเลือกข้อความที่แนะนำให้แปลงหรือไม่ในระหว่าง
การเขียนข้อความ แอปที่มีช่องแก้ไขสามารถระบุประเภทการเปลี่ยนแปลงข้อความเมื่อ
ส่งเหตุการณ์การช่วยเหลือพิเศษที่ข้อความมีการเปลี่ยนแปลง
เช่น แอปสามารถระบุว่ามีการเปลี่ยนแปลงข้อความในระหว่างการเขียนข้อความ หรือการเปลี่ยนแปลงข้อความเกิดจากการคอมมิต
การดำเนินการนี้จะช่วยให้บริการการช่วยเหลือพิเศษ
เช่น โปรแกรมอ่านหน้าจอ ให้ความคิดเห็นที่แม่นยำยิ่งขึ้นตาม
ลักษณะของการแก้ไขข้อความ
การรับแอปไปใช้งาน
แอป IME: เมื่อตั้งค่าการเขียนข้อความในช่องแก้ไข IME จะใช้
TextAttribute.Builder.setTextSuggestionSelected()เพื่อระบุว่ามีการเลือก ตัวเลือก Conversion ที่เฉพาะเจาะจงหรือไม่แอปที่มีช่องแก้ไข: แอปที่ดูแลรักษา
InputConnectionที่กำหนดเองจะ เรียกข้อมูลการเลือกผู้สมัครได้โดยการเรียกใช้TextAttribute.isTextSuggestionSelected()จากนั้นแอปเหล่านี้ควรเรียกใช้AccessibilityEvent.setTextChangeTypes()เมื่อส่งTYPE_VIEW_TEXT_CHANGEDเหตุการณ์ แอปที่กำหนดเป้าหมายเป็น Android 17 (API ระดับ 37) ซึ่งใช้TextViewมาตรฐานจะเปิดใช้ฟีเจอร์นี้โดยค่าเริ่มต้น (กล่าวคือTextViewจะจัดการการดึงข้อมูลจาก IME และการตั้งค่าประเภทการเปลี่ยนแปลงข้อความเมื่อส่งเหตุการณ์ไปยังบริการช่วยเหลือพิเศษ)บริการการช่วยเหลือพิเศษ: บริการการช่วยเหลือพิเศษที่ประมวลผลเหตุการณ์
TYPE_VIEW_TEXT_CHANGEDสามารถเรียกใช้AccessibilityEvent.getTextChangeTypes()เพื่อระบุลักษณะของการแก้ไขและปรับกลยุทธ์ความคิดเห็นตามนั้น
ความเป็นส่วนตัว
Android 17 มีการเปลี่ยนแปลงต่อไปนี้เพื่อปรับปรุงความเป็นส่วนตัวของผู้ใช้
เปิดใช้ ECH (Encrypted Client Hello) แล้ว
Android 17 เปิดตัวการรองรับแพลตฟอร์มสำหรับ Encrypted Client Hello (ECH) ซึ่งเป็นส่วนขยาย TLS ที่ช่วยเพิ่มความเป็นส่วนตัวของผู้ใช้ด้วยการเข้ารหัสการระบุชื่อเซิร์ฟเวอร์ (SNI) ในแฮนด์เชค TLS การเข้ารหัสนี้ช่วยป้องกันไม่ให้ผู้สังเกตการณ์เครือข่ายระบุโดเมนที่เฉพาะเจาะจงซึ่งแอปของคุณเชื่อมต่อได้อย่างง่ายดาย
สำหรับแอปที่กำหนดเป้าหมายเป็น Android 17 (ระดับ API 37) ขึ้นไป จะใช้ ECH สำหรับการเชื่อมต่อ TLS ECH จะทํางานก็ต่อเมื่อไลบรารีเครือข่ายที่แอปใช้ (เช่น HttpEngine, WebView หรือ OkHttp) ได้ผสานรวมการรองรับ ECH และเซิร์ฟเวอร์ระยะไกลรองรับโปรโตคอล ECH ด้วย หากต่อรอง ECH ไม่ได้ ไคลเอ็นต์จะส่งส่วนขยาย ECH ที่มีเนื้อหาแบบสุ่ม (กลไกที่เรียกว่า ECH GREASE) ดูรายละเอียดเพิ่มเติมเกี่ยวกับวิธีการทำงานของ ECH GREASE ได้ที่ RFC 9849
Android 17 เพิ่มองค์ประกอบใหม่
<domainEncryption> ลงในไฟล์การกำหนดค่าความปลอดภัยของเครือข่ายเพื่อให้แอปปรับแต่งลักษณะการทำงานนี้ได้
นักพัฒนาแอปสามารถใช้ <domainEncryption> ภายในแท็ก <base-config> หรือ <domain-config> เพื่อเลือกโหมด ECH (เช่น "enabled" หรือ "disabled") ในระดับโลกหรือระดับโดเมน
ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบClient Hello ที่เข้ารหัส
ต้องมีสิทธิ์เข้าถึงเครือข่ายภายในสำหรับแอปที่กำหนดเป้าหมายเป็น Android 17
Android 17 เปิดตัวสิทธิ์รันไทม์ ACCESS_LOCAL_NETWORK
เพื่อปกป้องผู้ใช้จากการเข้าถึงเครือข่าย LAN โดยไม่ได้รับอนุญาต เนื่องจากฟีเจอร์นี้อยู่ภายใต้กลุ่มสิทธิ์ NEARBY_DEVICES ที่มีอยู่ ผู้ใช้ที่ให้สิทธิ์ NEARBY_DEVICES อื่นๆ ไปแล้วจึงไม่ต้องรับข้อความแจ้งอีก ข้อกำหนดใหม่นี้จะป้องกันไม่ให้แอปที่เป็นอันตรายใช้ประโยชน์จากการเข้าถึงเครือข่าย LAN แบบไม่จำกัดเพื่อการติดตามผู้ใช้และการทำฟิงเกอร์ปรินต์อย่างลับๆ
การประกาศและขอสิทธิ์นี้จะช่วยให้แอปค้นหาและเชื่อมต่อกับอุปกรณ์ในเครือข่ายเฉพาะที่ (LAN) ได้ เช่น อุปกรณ์สมาร์ทโฮมหรือเครื่องรับการแคสต์
ตอนนี้แอปที่กำหนดเป้าหมายเป็น Android 17 (API ระดับ 37) ขึ้นไปมี 2 วิธีในการ รักษาการสื่อสารกับอุปกรณ์ LAN ได้แก่ ใช้เครื่องมือเลือกอุปกรณ์ที่ระบบเป็นสื่อกลาง ซึ่งรักษาความเป็นส่วนตัวเพื่อข้ามข้อความแจ้งขอสิทธิ์ หรือขอสิทธิ์ใหม่นี้อย่างชัดเจน ในรันไทม์เพื่อรักษาการสื่อสารในเครือข่าย LAN
ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบเกี่ยวกับสิทธิ์เครือข่าย LAN
ซ่อนรหัสผ่านจากอุปกรณ์จริง
หากแอปกำหนดเป้าหมายเป็น Android 17 (ระดับ API 37) ขึ้นไปและผู้ใช้กำลังใช้อุปกรณ์ป้อนข้อมูลจริง (เช่น แป้นพิมพ์ภายนอก) ระบบปฏิบัติการ Android จะใช้การตั้งค่า show_passwords_physical ใหม่กับอักขระทั้งหมดในช่องรหัสผ่าน โดยค่าเริ่มต้น การตั้งค่านั้นจะซ่อนอักขระรหัสผ่านทั้งหมด
ระบบ Android จะแสดงอักขระรหัสผ่านที่พิมพ์ล่าสุดเพื่อช่วยให้ผู้ใช้ทราบ ว่าพิมพ์รหัสผ่านผิดหรือไม่ อย่างไรก็ตาม แป้นพิมพ์ลัดเหล่านี้จะมีความจำเป็นน้อยกว่ามากเมื่อใช้กับแป้นพิมพ์ภายนอกขนาดใหญ่ นอกจากนี้ อุปกรณ์ที่มีแป้นพิมพ์ภายนอกมักมี จอแสดงผลขนาดใหญ่กว่า ซึ่งเพิ่มความเสี่ยงที่ผู้อื่นจะเห็นรหัสผ่านที่พิมพ์
หากผู้ใช้ใช้หน้าจอสัมผัสของอุปกรณ์ ระบบจะใช้การตั้งค่า
show_passwords_touchใหม่
การปกป้อง OTP สำหรับข้อความ SMS มาตรฐาน
ตั้งแต่ Android 17 เป็นต้นไป Android จะขยายการป้องกัน OTP ทาง SMS
ให้ครอบคลุมข้อความ SMS มาตรฐาน (ข้อความ SMS ที่มี OTP ซึ่งไม่ได้
ใช้รูปแบบ WebOTP หรือ SMS Retriever) สำหรับแอปส่วนใหญ่ที่กำหนดเป้าหมายเป็น
Android 17 (ระดับ API 37) ขึ้นไป ข้อความ SMS เหล่านี้จะ
พร้อมใช้งานหลังจากได้รับ 3 ชั่วโมง ความล่าช้านี้มีจุดประสงค์เพื่อช่วย
ป้องกันการลักลอบใช้ OTP ในระหว่างการหน่วงเวลา 3 ชั่วโมงนี้ ระบบจะระงับการออกอากาศของSMS_RECEIVED_ACTION และกรองการค้นหาฐานข้อมูลของผู้ให้บริการ SMS ข้อความ SMS จะพร้อมใช้งานในแอปเหล่านี้หลังจากที่เกิดความล่าช้า
แอปบางแอป เช่น แอปผู้ช่วย SMS เริ่มต้น แอปคู่หูของอุปกรณ์ที่เชื่อมต่อ ฯลฯ จะได้รับการยกเว้นจากความล่าช้านี้ แอปทั้งหมดที่ต้องอ่านข้อความ SMS เพื่อดึงข้อมูล OTP ควรเปลี่ยนไปใช้ SMS Retriever หรือ SMS User Consent API เพื่อให้ฟังก์ชันการทำงานยังคงดำเนินต่อไปได้
ความปลอดภัย
Android 17 มีการปรับปรุงความปลอดภัยของอุปกรณ์และแอปดังต่อไปนี้
ความปลอดภัยของกิจกรรม
ใน Android 17 แพลตฟอร์มจะยังคงเปลี่ยนไปใช้สถาปัตยกรรม "ปลอดภัยโดยค่าเริ่มต้น" พร้อมเปิดตัวชุดการปรับปรุงที่ออกแบบมาเพื่อลดช่องโหว่ที่มีความรุนแรงสูง เช่น ฟิชชิง การลักลอบใช้การโต้ตอบ และการโจมตีแบบ Confused Deputy การอัปเดตนี้กำหนดให้นักพัฒนาแอปเลือกใช้ มาตรฐานความปลอดภัยใหม่โดยชัดแจ้งเพื่อรักษาความเข้ากันได้ของแอปและการปกป้องผู้ใช้
ผลกระทบที่สำคัญสำหรับนักพัฒนาแอปมีดังนี้
- การปิดช่องโหว่ BAL และการเลือกใช้ที่ปรับปรุงแล้ว: เรากำลังปรับปรุงข้อจำกัดการเปิดใช้กิจกรรมในเบื้องหลัง (BAL) โดยขยายการปกป้องไปยัง
IntentSenderนักพัฒนาแอปต้องย้ายข้อมูลออกจากค่าคงที่MODE_BACKGROUND_ACTIVITY_START_ALLOWEDรุ่นเดิม แต่คุณควร ใช้การควบคุมแบบละเอียด เช่นMODE_BACKGROUND_ACTIVITY_START_ALLOW_IF_VISIBLEซึ่งจำกัด การเริ่มต้นกิจกรรมไว้ในสถานการณ์ที่แอปโทรปรากฏให้เห็น ซึ่งจะช่วย ลดพื้นผิวการโจมตีได้อย่างมาก - เครื่องมือในการนำไปใช้: นักพัฒนาแอปควรใช้โหมดเข้มงวดและการตรวจสอบ Lint ที่อัปเดตแล้ว เพื่อระบุรูปแบบเดิมและเตรียมพร้อมสำหรับข้อกำหนดของ SDK เป้าหมายในอนาคต
เปิดใช้ CT โดยค่าเริ่มต้น
หากแอปกำหนดเป้าหมายเป็น Android 17 (API ระดับ 37) ขึ้นไป ระบบจะเปิดใช้ ความโปร่งใสของใบรับรอง (CT) โดยค่าเริ่มต้น (ใน Android 16 CT จะพร้อมใช้งาน แต่แอปต้องเลือกใช้)
DCL ดั้งเดิมที่ปลอดภัยยิ่งขึ้น - C
หากแอปกำหนดเป้าหมายเป็น Android 17 (ระดับ API 37) ขึ้นไป การป้องกันการโหลดโค้ดแบบไดนามิก (DCL) ที่ปลอดภัยยิ่งขึ้นซึ่งเปิดตัวใน Android 14 สำหรับไฟล์ DEX และ JAR จะครอบคลุมไลบรารีเนทีฟด้วย
ไฟล์เนทีฟทั้งหมดที่โหลดโดยใช้ System.load() ต้องทำเครื่องหมายเป็นแบบอ่านอย่างเดียว
มิเช่นนั้นระบบจะแสดง UnsatisfiedLinkError
เราขอแนะนำให้แอปหลีกเลี่ยงการโหลดโค้ดแบบไดนามิกทุกครั้งที่ทำได้ เนื่องจากวิธีนี้จะเพิ่มความเสี่ยงที่แอปอาจถูกโจมตีด้วยการแทรกโค้ดหรือการดัดแปลงโค้ดอย่างมาก
จำกัดฟิลด์ PII ในมุมมองข้อมูล CP2
สำหรับแอปที่กำหนดเป้าหมายเป็น Android 17 (ระดับ API 37) ขึ้นไป Contacts Provider 2 (CP2) จะจำกัดคอลัมน์บางรายการที่มีข้อมูลส่วนบุคคลที่ระบุตัวบุคคลนั้นได้ (PII) จากมุมมองข้อมูล เมื่อเปิดใช้การเปลี่ยนแปลงนี้ ระบบจะนำคอลัมน์เหล่านี้ออกจากมุมมองข้อมูลเพื่อเพิ่มความเป็นส่วนตัวของผู้ใช้ คอลัมน์ที่จำกัด ได้แก่
แอปที่ใช้คอลัมน์เหล่านี้จาก ContactsContract.Data
สามารถดึงข้อมูลจาก ContactsContract.RawContacts
แทนได้โดยการเข้าร่วมกับ RAW_CONTACT_ID
บังคับใช้การตรวจสอบ SQL อย่างเข้มงวดใน CP2
สำหรับแอปที่กำหนดเป้าหมายเป็น Android 17 (API ระดับ Android 17 (API ระดับ 37)) ขึ้นไป ผู้ให้บริการรายชื่อติดต่อ 2 (CP2) จะบังคับใช้การตรวจสอบการค้นหา SQL อย่างเข้มงวดเมื่อมีการเข้าถึงตาราง ContactsContract.Data โดยไม่มีสิทธิ์ READ_CONTACTS
การเปลี่ยนแปลงนี้จะทำให้ระบบตั้งค่าตัวเลือกStrictColumnsและ
StrictGrammarเมื่อค้นหาตาราง ContactsContract.Data หากแอปไม่มีสิทธิ์ READ_CONTACTS
หากคำค้นหา
ใช้รูปแบบที่ไม่เข้ากันกับรูปแบบเหล่านี้ ระบบจะ
ปฏิเสธและทำให้เกิดข้อยกเว้น
การตรวจหา
Android 17 มีการเปลี่ยนแปลงต่อไปนี้ในด้านระบบอัจฉริยะ
การเลิกใช้งาน setContentCaptureEnabled
ระบบจะเปิดใช้การจับภาพเนื้อหาในอุปกรณ์บางอย่างโดยค่าเริ่มต้นเพื่อให้ฟีเจอร์ AI ในอุปกรณ์วิเคราะห์เนื้อหาบนหน้าจอเพื่อมอบประสบการณ์การใช้งานอัจฉริยะ
ตั้งแต่ Android 17 เป็นต้นไป เราจะเลิกใช้เมธอด API
ContentCaptureManager.setContentCaptureEnabled(boolean)
สำหรับแอปที่กำหนดเป้าหมายเป็น Android 17 (API ระดับ 37) ขึ้นไป การเรียกใช้ setContentCaptureEnabled(false) จะไม่ปิดใช้การจับภาพเนื้อหาอีกต่อไป
หากแอปของคุณต้องปิดใช้การจับภาพเนื้อหาต่อไปหรือจำกัดไม่ให้ระบบจับภาพเนื้อหาบนหน้าจอ คุณต้องเปลี่ยนไปใช้พารามิเตอร์เลย์เอาต์หน้าต่าง FLAG_SECURE
หากต้องการปิดใช้การจับภาพเนื้อหา ให้ตั้งค่าฟีเจอร์ FLAG_SECURE ในหน้าต่างตามที่แสดง
ในตัวอย่างต่อไปนี้
Kotlin
window.setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
)
Java
getWindow().setFlags(
WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE
);
ดูรายละเอียดเพิ่มเติมได้ที่เอกสารประกอบอ้างอิงของ
WindowManager.LayoutParams.FLAG_SECURE
สื่อ
Android 17 มีการเปลี่ยนแปลงลักษณะการทำงานของสื่อต่อไปนี้
การปิดช่องโหว่ของเสียงเบื้องหลัง
ตั้งแต่ Android 17 เป็นต้นไป เฟรมเวิร์กเสียงจะบังคับใช้ข้อจำกัดในการโต้ตอบเสียงในเบื้องหลัง ซึ่งรวมถึงการเล่นเสียง คำขอโฟกัสเสียง และ API การเปลี่ยนระดับเสียง เพื่อให้มั่นใจว่าผู้ใช้เป็นผู้เริ่มการเปลี่ยนแปลงเหล่านี้โดยเจตนา
แอปทั้งหมดมีข้อจำกัดด้านเสียงบางประการ อย่างไรก็ตาม ข้อจำกัดจะเข้มงวดมากขึ้นหากแอปกำหนดเป้าหมายเป็น Android 17 (ระดับ API 37) หากแอปเหล่านี้ โต้ตอบกับเสียงขณะที่อยู่ในเบื้องหลัง แอปต้องมีบริการที่ทำงานอยู่เบื้องหน้า นอกจากนี้ แอปต้องเป็นไปตามข้อกำหนดข้อใดข้อหนึ่งหรือทั้ง 2 ข้อต่อไปนี้
- บริการที่ทำงานอยู่เบื้องหน้าต้องมีความสามารถขณะใช้งาน (WIU)
- แอปต้องมีสิทธิ์การปลุกที่แน่นอนและโต้ตอบกับสตรีมเสียง
USAGE_ALARM
ดูข้อมูลเพิ่มเติม รวมถึงกลยุทธ์การลดความเสี่ยงได้ที่การเพิ่มความปลอดภัยของเสียงในเบื้องหลัง
รูปแบบของอุปกรณ์
Android 17 มีการเปลี่ยนแปลงต่อไปนี้เพื่อปรับปรุงประสบการณ์ของผู้ใช้ ในอุปกรณ์ขนาดและรูปแบบต่างๆ
การเปลี่ยนแปลง API ของแพลตฟอร์มเพื่อไม่สนใจข้อจำกัดด้านการวางแนว ความสามารถในการปรับขนาด และสัดส่วนการแสดงผลบนหน้าจอขนาดใหญ่ (sw>=600dp)
เราได้เปิดตัวการเปลี่ยนแปลง Platform API ใน Android 16 เพื่อไม่สนใจข้อจำกัดด้านการวางแนว สัดส่วนการแสดงผล และความสามารถในการปรับขนาดบนหน้าจอขนาดใหญ่ (sw >= 600dp) สำหรับแอปที่กำหนดเป้าหมายเป็น API ระดับ 36 ขึ้นไป นักพัฒนาแอปมีตัวเลือกในการเลือกไม่ใช้การเปลี่ยนแปลงเหล่านี้ด้วย SDK 36 แต่ตัวเลือกการเลือกไม่ใช้นี้จะไม่มีให้บริการอีกต่อไปสำหรับแอปที่กำหนดเป้าหมายเป็น Android 17 (ระดับ API 37) ขึ้นไป
ดูข้อมูลเพิ่มเติมได้ที่ระบบจะไม่สนใจข้อจำกัดเกี่ยวกับ การวางแนวและการปรับขนาด
การเชื่อมต่อ
Android 17 มีการเปลี่ยนแปลงต่อไปนี้เพื่อปรับปรุงความสอดคล้องและ
ให้สอดคล้องกับInputStreamลักษณะการทำงานของ Java มาตรฐานสำหรับซ็อกเก็ต RFCOMM ของบลูทูธ
ลักษณะการทำงานของ read() ใน BluetoothSocket สำหรับ RFCOMM ที่สอดคล้องกัน
สำหรับแอปที่กำหนดเป้าหมายเป็น Android 17 (API ระดับ 37) เมธอด read() ของ InputStream ที่ได้จาก BluetoothSocket ที่อิงตาม RFCOMM จะแสดงผลเป็น -1 เมื่อปิดซ็อกเก็ตหรือการเชื่อมต่อถูกตัด
การเปลี่ยนแปลงนี้จะทำให้ลักษณะการทำงานของซ็อกเก็ต RFCOMM สอดคล้องกับซ็อกเก็ต LE CoC และ
สอดคล้องกับเอกสารประกอบมาตรฐาน InputStream.read()
ซึ่งระบุว่าระบบจะแสดง -1 เมื่อถึงจุดสิ้นสุดของสตรีม
แอปที่อาศัยการดักจับ IOException เพียงอย่างเดียวเพื่อออกจากลูปการอ่านอาจได้รับผลกระทบจากการเปลี่ยนแปลงนี้ และควรอัปเดตลูปการอ่าน BluetoothSocket เพื่อตรวจสอบค่าที่ส่งคืนของ -1 อย่างชัดเจน ซึ่งจะช่วยให้มั่นใจได้ว่าลูปจะสิ้นสุดอย่างถูกต้องเมื่ออุปกรณ์ระยะไกลยกเลิกการเชื่อมต่อหรือปิดซ็อกเก็ต ดูตัวอย่างการติดตั้งใช้งานที่แนะนําได้ในข้อมูลโค้ดในคู่มือโอนข้อมูลผ่านบลูทูธ