การเปลี่ยนแปลง Android 6.0

นอกจากฟีเจอร์และความสามารถใหม่ๆ แล้ว Android 6.0 (API ระดับ 23) ยังมีการเปลี่ยนแปลงระบบและลักษณะการทํางานของ API อีกมากมาย เอกสารนี้จะไฮไลต์การเปลี่ยนแปลงที่สำคัญบางอย่างที่คุณควรทำความเข้าใจและนำมาพิจารณาในแอป

หากคุณเผยแพร่แอปสำหรับ Android ก่อนหน้านี้แล้ว โปรดทราบว่าการเปลี่ยนแปลงเหล่านี้ในแพลตฟอร์มจะส่งผลต่อแอป

สิทธิ์ขณะรันไทม์

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

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

โปรดดูรายละเอียดเกี่ยวกับการรองรับโมเดลสิทธิ์ใหม่ในแอปได้ที่ การใช้สิทธิ์ของระบบ ดูเคล็ดลับเกี่ยวกับวิธีประเมินผลกระทบต่อแอปได้ที่หมายเหตุการใช้งานสิทธิ์

Doze และสแตนด์บายแอป

เวอร์ชันนี้มีการเปิดตัวการเพิ่มประสิทธิภาพใหม่เพื่อประหยัดพลังงานสำหรับอุปกรณ์และแอปที่ไม่ได้ใช้งาน ฟีเจอร์เหล่านี้มีผลกับทุกแอป ดังนั้นโปรดทดสอบแอปในโหมดใหม่เหล่านี้

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

ดูข้อมูลเพิ่มเติมเกี่ยวกับการเปลี่ยนแปลงการประหยัดพลังงานเหล่านี้ได้ที่หัวข้อการเพิ่มประสิทธิภาพสำหรับโหมด Doze และสแตนด์บายแอป

การนำ Apache HTTP Client ออก

เวอร์ชัน Android 6.0 จะไม่รองรับไคลเอ็นต์ HTTP ของ Apache หากแอปของคุณใช้ไคลเอ็นต์นี้และกำหนดเป้าหมายเป็น Android 2.3 (API ระดับ 9) ขึ้นไป ให้ใช้คลาส HttpURLConnection แทน API นี้มีประสิทธิภาพมากขึ้นเนื่องจากจะลดการใช้เครือข่ายผ่านการบีบอัดแบบโปร่งใสและการแคชการตอบกลับ รวมถึงลดการใช้พลังงาน หากต้องการใช้ Apache HTTP API ต่อไป คุณต้องประกาศการพึ่งพาเวลาคอมไพล์ต่อไปนี้ในไฟล์ build.gradle ก่อน

android {
    useLibrary 'org.apache.http.legacy'
}

BoringSSL

Android กำลังจะเลิกใช้ OpenSSL ไปใช้ไลบรารี BoringSSL หากคุณใช้ Android NDK ในแอป อย่าลิงก์กับไลบรารีการเข้ารหัสที่ไม่ได้เป็นส่วนหนึ่งของ NDK API เช่น libcrypto.so และ libssl.so ไลบรารีเหล่านี้ไม่ใช่ API สาธารณะ และอาจเปลี่ยนแปลงหรือใช้งานไม่ได้โดยไม่ได้รับการแจ้งเตือนในรุ่นและอุปกรณ์ต่างๆ นอกจากนี้ คุณอาจเสี่ยงที่จะมีช่องโหว่ด้านความปลอดภัย แต่ให้แก้ไขโค้ดเนทีฟเพื่อเรียก API การเข้ารหัสของ Java ผ่าน JNI หรือลิงก์แบบคงที่กับไลบรารีการเข้ารหัสที่คุณเลือก

สิทธิ์เข้าถึงตัวระบุฮาร์ดแวร์

ตั้งแต่รุ่นนี้เป็นต้นไป Android จะนําการเข้าถึงแบบเป็นโปรแกรมไปยังตัวระบุฮาร์ดแวร์ในเครื่องของอุปกรณ์ออกสําหรับแอปที่ใช้ Wi-Fi และ Bluetooth API เพื่อให้ผู้ใช้ได้รับการปกป้องข้อมูลมากขึ้น ตอนนี้เมธอด WifiInfo.getMacAddress() และ BluetoothAdapter.getAddress() จะแสดงผลค่าคงที่ 02:00:00:00:00:00

หากต้องการเข้าถึงตัวระบุฮาร์ดแวร์ของอุปกรณ์ภายนอกที่อยู่ใกล้เคียงผ่านการสแกนบลูทูธและ Wi-Fi ตอนนี้แอปของคุณต้องมีสิทธิ์ ACCESS_FINE_LOCATION หรือ ACCESS_COARSE_LOCATION

หมายเหตุ: เมื่ออุปกรณ์ที่ใช้ Android 6.0 (API ระดับ 23) เริ่มการสแกน Wi-Fi ในเบื้องหลังหรือบลูทูธ การดำเนินการดังกล่าวจะปรากฏต่ออุปกรณ์ภายนอกว่าเป็นที่อยู่ MAC แบบสุ่ม

การแจ้งเตือน

รุ่นนี้จะนําวิธีการ Notification.setLatestEventInfo() ออก ใช้คลาส Notification.Builder แทนเพื่อสร้างการแจ้งเตือน หากต้องการอัปเดตการแจ้งเตือนซ้ำๆ ให้ใช้อินสแตนซ์ Notification.Builder ซ้ำ เรียกใช้เมธอด build() เพื่อรับอินสแตนซ์ Notification ที่อัปเดตแล้ว

คำสั่ง adb shell dumpsys notification จะไม่พิมพ์ข้อความแจ้งเตือนอีกต่อไป ใช้คําสั่ง adb shell dumpsys notification --noredact แทนเพื่อพิมพ์ข้อความในออบเจ็กต์การแจ้งเตือน

การเปลี่ยนแปลง Audio Manager

ระบบไม่รองรับการตั้งค่าระดับเสียงโดยตรงหรือปิดเสียงสตรีมบางรายการผ่านAudioManager class อีกต่อไป เมธอด setStreamSolo() เลิกใช้งานแล้ว และคุณควรเรียกใช้เมธอด requestAudioFocus() แทน ในทํานองเดียวกัน ระบบเลิกใช้งานเมธอด setStreamMute() แล้ว ให้เรียกใช้เมธอด adjustStreamVolume() และส่งค่าทิศทาง ADJUST_MUTE หรือ ADJUST_UNMUTE แทน

การเลือกข้อความ

หน้าจอแสดงฟีเจอร์การเลือกข้อความใหม่ภายในแถบเครื่องมือแบบลอย

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

หากต้องการใช้แถบเครื่องมือแบบลอยตัวเพื่อเลือกข้อความ ให้ทำการเปลี่ยนแปลงต่อไปนี้ในแอปที่มีอยู่

  1. ในออบเจ็กต์ View หรือ Activity ให้เปลี่ยนการเรียกใช้ ActionMode จาก startActionMode(Callback) เป็น startActionMode(Callback, ActionMode.TYPE_FLOATING)
  2. ใช้การใช้งาน ActionMode.Callback ที่มีอยู่เพื่อขยายActionMode.Callback2แทน
  3. ลบล้างเมธอด onGetContentRect() เพื่อระบุพิกัดของออบเจ็กต์ Rect (เช่น สี่เหลี่ยมผืนผ้าสำหรับการเลือกข้อความ) ในมุมมอง
  4. หากการวางตำแหน่งสี่เหลี่ยมผืนผ้าใช้งานไม่ได้แล้ว และองค์ประกอบนี้เป็นเพียงองค์ประกอบเดียวที่ใช้งานไม่ได้ ให้เรียกใช้เมธอด invalidateContentRect()

หากคุณใช้ บรรณานุกรมการสนับสนุน Android ฉบับที่ 22.2 โปรดทราบว่าแถบเครื่องมือแบบลอยไม่สามารถใช้งานย้อนหลังได้ และ appcompat จะควบคุมออบเจ็กต์ ActionMode โดยค่าเริ่มต้น วิธีนี้จะป้องกันไม่ให้แสดงแถบเครื่องมือแบบลอย หากต้องการเปิดใช้การสนับสนุน ActionMode ใน AppCompatActivity ให้เรียกใช้ getDelegate() แล้วเรียกใช้ setHandleNativeActionModesEnabled() บนออบเจ็กต์ AppCompatDelegate ที่แสดงผล และตั้งค่าพารามิเตอร์อินพุตเป็น false การเรียกนี้จะทำให้เฟรมเวิร์กควบคุมออบเจ็กต์ ActionMode ได้อีกครั้ง ในอุปกรณ์ที่ใช้ Android 6.0 (API ระดับ 23) ที่ช่วยให้เฟรมเวิร์กรองรับโหมด ActionBar หรือโหมดแถบเครื่องมือแบบลอย แต่ในอุปกรณ์ที่ใช้ Android 5.1 (API ระดับ 22) หรือต่ำกว่า จะรองรับเฉพาะโหมด ActionBar เท่านั้น

การเปลี่ยนแปลงบุ๊กมาร์กของเบราว์เซอร์

รุ่นนี้จะนำการรองรับบุ๊กมาร์กส่วนกลางออก ระบบได้นำเมธอด android.provider.Browser.getAllBookmarks() และ android.provider.Browser.saveBookmark() ออกแล้ว ในทำนองเดียวกัน ระบบจะนำสิทธิ์ READ_HISTORY_BOOKMARKS และ WRITE_HISTORY_BOOKMARKS ออก หากแอปกำหนดเป้าหมายเป็น Android 6.0 (API ระดับ 23) ขึ้นไป อย่าเข้าถึงบุ๊กมาร์กจากผู้ให้บริการทั่วโลกหรือใช้สิทธิ์บุ๊กมาร์ก แต่แอปควรจัดเก็บข้อมูลบุ๊กมาร์กไว้ในเครื่องแทน

การเปลี่ยนแปลง Android Keystore

ผู้ให้บริการคีย์สโตร์ Android จะไม่รองรับ DSA อีกต่อไปในรุ่นนี้ ระบบยังคงรองรับ ECDSA

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

การเปลี่ยนแปลงเกี่ยวกับ Wi-Fi และเครือข่าย

เวอร์ชันนี้มีการเปิดตัวการเปลี่ยนแปลงลักษณะการทํางานต่อไปนี้ใน Wi-Fi และ Networking API

  • ตอนนี้แอปจะเปลี่ยนสถานะของออบเจ็กต์ WifiConfiguration ได้ก็ต่อเมื่อคุณสร้างออบเจ็กต์เหล่านั้นเท่านั้น คุณไม่ได้รับอนุญาตให้แก้ไขหรือลบWifiConfigurationออบเจ็กต์ที่ผู้ใช้หรือแอปอื่นๆ สร้างขึ้น
  • ก่อนหน้านี้ หากแอปบังคับให้อุปกรณ์เชื่อมต่อกับเครือข่าย Wi-Fi ที่ต้องการโดยใช้ enableNetwork() ที่มีการตั้งค่า disableAllOthers=true อุปกรณ์จะตัดการเชื่อมต่อจากเครือข่ายอื่นๆ เช่น อินเทอร์เน็ตมือถือ ในรุ่นนี้ อุปกรณ์จะไม่ยกเลิกการเชื่อมต่อกับเครือข่ายอื่นๆ ดังกล่าวอีกต่อไป หาก targetSdkVersion ของแอปอยู่ที่ “20” หรือต่ำกว่า ระบบจะปักหมุดแอปดังกล่าวไว้กับเครือข่าย Wi-Fi ที่เลือก หาก targetSdkVersion ของแอปมีค่าอยู่ที่ “21” ขึ้นไป ให้ใช้ API แบบหลายเครือข่าย (เช่น openConnection(), bindSocket() และเมธอด bindProcessToNetwork() ใหม่) เพื่อให้แน่ใจว่ามีการส่งการจราจรของข้อมูลในเครือข่ายไปยังเครือข่ายที่เลือก

การเปลี่ยนแปลงบริการกล้อง

ในรุ่นนี้ รูปแบบการเข้าถึงทรัพยากรที่แชร์ในบริการกล้องได้เปลี่ยนไปจากรูปแบบการเข้าถึงแบบ "มาก่อนได้ก่อน" ก่อนหน้านี้เป็นรูปแบบการเข้าถึงที่ให้ความสำคัญกับกระบวนการที่มีลำดับความสำคัญสูง การเปลี่ยนแปลงลักษณะการทํางานของบริการมีดังนี้

  • สิทธิ์เข้าถึงทรัพยากรระบบย่อยของกล้อง ซึ่งรวมถึงการเปิดและกำหนดค่าอุปกรณ์กล้อง จะได้รับการมอบหมายตาม "ลําดับความสําคัญ" ของกระบวนการสมัครของไคลเอ็นต์ โดยทั่วไปแล้ว กระบวนการแอปพลิเคชันที่มีกิจกรรมที่ผู้ใช้มองเห็นหรือทำงานอยู่เบื้องหน้าจะได้รับลำดับความสำคัญสูงกว่า ซึ่งทำให้การเรียกใช้ทรัพยากรกล้องมีความน่าเชื่อถือมากขึ้น
  • ระบบอาจ "ย้ายออก" ไคลเอ็นต์กล้องที่ใช้งานอยู่ของแอปที่มีลำดับความสำคัญต่ำกว่าเมื่อแอปพลิเคชันที่มีลำดับความสำคัญสูงกว่าพยายามใช้กล้อง ใน Camera API ที่เลิกใช้งานแล้ว ระบบจะเรียกใช้ onError() สำหรับไคลเอ็นต์ที่ถูกย้ายออก ใน Camera2 API ผลลัพธ์ที่ได้คือมีการเรียกใช้ onDisconnected() สำหรับไคลเอ็นต์ที่ถูกย้ายออก
  • ในอุปกรณ์ที่มีฮาร์ดแวร์กล้องที่เหมาะสม กระบวนการของแอปพลิเคชันแต่ละรายการจะเปิดและใช้งานอุปกรณ์กล้องแยกต่างหากได้พร้อมกัน อย่างไรก็ตาม ขณะนี้บริการกล้องตรวจพบและไม่อนุญาตการใช้งานแบบหลายกระบวนการ ซึ่งการเข้าถึงพร้อมกันทำให้ประสิทธิภาพหรือความสามารถของอุปกรณ์กล้องที่เปิดอยู่ลดลงอย่างมาก การเปลี่ยนแปลงนี้อาจส่งผลให้มี "การขับออก" สำหรับไคลเอ็นต์ที่มีลำดับความสำคัญต่ำกว่า แม้ว่าจะไม่มีแอปอื่นพยายามเข้าถึงอุปกรณ์กล้องเดียวกันโดยตรงก็ตาม
  • การเปลี่ยนผู้ใช้ปัจจุบันจะทำให้ไคลเอ็นต์กล้องที่ใช้งานอยู่ในแอปที่เป็นของบัญชีผู้ใช้ก่อนหน้าถูกนำออก การเข้าถึงกล้องจะจำกัดไว้สำหรับโปรไฟล์ผู้ใช้ที่เป็นของผู้ใช้อุปกรณ์ปัจจุบันเท่านั้น ในทางปฏิบัติ การดำเนินการนี้จะหมายความว่าบัญชี "ผู้มาเยือน" จะไม่สามารถทำงานต่อไปได้เมื่อผู้ใช้เปลี่ยนไปใช้บัญชีอื่น

รันไทม์

ตอนนี้รันไทม์ ART ใช้กฎการเข้าถึงสำหรับเมธอด newInstance() อย่างถูกต้องแล้ว การเปลี่ยนแปลงนี้ช่วยแก้ไขปัญหาที่ Dalvik ตรวจสอบกฎการเข้าถึงอย่างไม่ถูกต้องในเวอร์ชันก่อนหน้า หากแอปใช้เมธอด newInstance() และคุณต้องการลบล้างการตรวจสอบการเข้าถึง ให้เรียกใช้เมธอด setAccessible() ซึ่งตั้งค่าพารามิเตอร์อินพุตเป็น true หากแอปใช้ไลบรารี appcompat เวอร์ชัน 7 หรือไลบรารี recyclerview เวอร์ชัน 7 คุณจะต้องอัปเดตแอปให้ใช้ไลบรารีเหล่านี้เวอร์ชันล่าสุด มิฉะนั้น โปรดตรวจสอบว่าได้อัปเดตคลาสที่กำหนดเองซึ่งอ้างอิงจาก XML แล้วเพื่อให้เข้าถึงเครื่องมือสร้างคลาสได้

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

ตอนนี้การติดธง dlopen(3) RTLD_LOCAL ใช้งานได้อย่างถูกต้องแล้ว โปรดทราบว่า RTLD_LOCAL เป็นค่าเริ่มต้น ดังนั้นการเรียกใช้ dlopen(3) ที่ไม่ได้ใช้ RTLD_LOCAL อย่างชัดเจนจะได้รับผลกระทบ (เว้นแต่แอปของคุณจะใช้ RTLD_GLOBAL อย่างชัดเจน) เมื่อใช้ RTLD_LOCAL สัญลักษณ์จะไม่พร้อมใช้งานสำหรับไลบรารีที่โหลดโดยการเรียกใช้ dlopen(3) ในภายหลัง (ต่างจากที่การอ้างอิงโดยรายการ DT_NEEDED)

ใน Android เวอร์ชันก่อนหน้า หากแอปขอให้ระบบโหลดไลบรารีที่แชร์ร่วมกับการย้ายข้อความ ระบบจะแสดงคำเตือนแต่ยังอนุญาตให้โหลดไลบรารีนั้นได้ ตั้งแต่รุ่นนี้เป็นต้นไป ระบบจะปฏิเสธไลบรารีนี้หากเวอร์ชัน SDK เป้าหมายของแอปเป็น 23 ขึ้นไป แอปควรบันทึกdlopen(3)ความล้มเหลวและใส่ข้อความคำอธิบายปัญหาที่การเรียก dlerror(3) แสดงผล เพื่อช่วยให้คุณตรวจจับได้ว่าไลบรารีโหลดไม่สำเร็จหรือไม่ ดูข้อมูลเพิ่มเติมเกี่ยวกับการจัดการการเปลี่ยนตำแหน่งข้อความได้ในคู่มือนี้

การตรวจสอบ APK

ตอนนี้แพลตฟอร์มจะดำเนินการตรวจสอบ APK อย่างเข้มงวดมากขึ้น ระบบจะถือว่า APK เสียหายหากมีการประกาศไฟล์ในไฟล์ Manifest แต่ไฟล์นั้นไม่อยู่ใน APK APK ต้องได้รับการลงนามอีกครั้งหากเนื้อหาถูกนำออก

การเชื่อมต่อ USB

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

การเปลี่ยนแปลงของ Android for Work

รุ่นนี้มีการเปลี่ยนแปลงลักษณะการทํางานของ Android สำหรับงานดังต่อไปนี้

  • รายชื่อติดต่อของที่ทำงานในบริบทส่วนตัว ขณะนี้บันทึกการโทรของ Google บันทึกการโทรจะแสดงรายชื่อติดต่อของที่ทำงานเมื่อผู้ใช้ดูการโทรที่ผ่านมา การตั้งค่า setCrossProfileCallerIdDisabled() เป็น true จะซ่อนรายชื่อติดต่อในโปรไฟล์งานในบันทึกการโทรของ Google Dialer รายชื่อติดต่อสำหรับงานจะแสดงพร้อมกับรายชื่อติดต่อส่วนตัวในอุปกรณ์ผ่านบลูทูธได้ก็ต่อเมื่อคุณตั้งค่า setBluetoothContactSharingDisabled() เป็น false เท่านั้น โดยค่าเริ่มต้น ระบบจะตั้งค่าเป็น true
  • การนำการกำหนดค่า Wi-Fi ออก: ระบบจะนำการกำหนดค่า Wi-Fi ที่เจ้าของโปรไฟล์เพิ่ม (เช่น ผ่านการโทรไปยังเมธอด addNetwork()) ออกหากมีการลบโปรไฟล์งานดังกล่าว
  • การล็อกการกำหนดค่า Wi-Fi: ผู้ใช้จะแก้ไขหรือลบการกำหนดค่า Wi-Fi ใดๆ ที่สร้างโดยเจ้าของอุปกรณ์ที่ใช้งานอยู่ไม่ได้อีกต่อไปหาก WIFI_DEVICE_OWNER_CONFIGS_LOCKDOWN ไม่ใช่ 0 ผู้ใช้ยังคงสร้างและแก้ไขการกำหนดค่า Wi-Fi ของตนเองได้ อุปกรณ์ที่ใช้งานอยู่ เจ้าของมีสิทธิ์แก้ไขหรือนำการกำหนดค่า Wi-Fi ออก ซึ่งรวมถึงการกำหนดค่าที่ไม่ได้สร้างโดยเจ้าของ
  • ดาวน์โหลดเครื่องมือควบคุมนโยบายด้านอุปกรณ์ผ่านการเพิ่มบัญชี Google: เมื่อเพิ่มบัญชี Google ที่ต้องจัดการผ่านแอปเครื่องมือควบคุมนโยบายด้านอุปกรณ์ (DPC) ลงในอุปกรณ์นอกบริบทที่มีการจัดการ ตอนนี้ขั้นตอนการเพิ่มบัญชีจะแจ้งให้ผู้ใช้ติดตั้ง WPC ที่เหมาะสม ลักษณะการทำงานนี้มีผลกับบัญชีที่เพิ่มผ่านการตั้งค่า > บัญชี และในวิซาร์ดการตั้งค่าอุปกรณ์เริ่มต้นด้วย
  • การเปลี่ยนแปลงลักษณะการทํางานของ DevicePolicyManager API บางรายการ
    • การเรียกใช้วิธี setCameraDisabled() จะส่งผลต่อกล้องของผู้ใช้ที่เรียกใช้เท่านั้น การเรียกใช้จากโปรไฟล์ที่มีการจัดการจะไม่ส่งผลต่อแอปกล้องที่ทำงานในผู้ใช้หลัก
    • นอกจากนี้ วิธีการนี้ยังพร้อมให้เจ้าของโปรไฟล์และเจ้าของอุปกรณ์ใช้งานแล้วsetKeyguardDisabledFeatures()
    • เจ้าของโปรไฟล์สามารถตั้งข้อจํากัดของการล็อกปุ่มต่อไปนี้ได้
      • KEYGUARD_DISABLE_TRUST_AGENTS และ KEYGUARD_DISABLE_FINGERPRINT ซึ่งส่งผลต่อการตั้งค่าการป้องกันด้วยการล็อกคีย์สำหรับผู้ใช้หลักของโปรไฟล์
      • KEYGUARD_DISABLE_UNREDACTED_NOTIFICATIONS ซึ่งจะมีผลกับการแจ้งเตือนที่สร้างโดยแอปพลิเคชันในโปรไฟล์ที่มีการจัดการเท่านั้น
    • เลิกใช้งานเมธอด DevicePolicyManager.createAndInitializeUser() และ DevicePolicyManager.createUser() แล้ว
    • ตอนนี้เมธอด setScreenCaptureDisabled() จะบล็อกโครงสร้างการสนับสนุนเมื่อแอปของผู้ใช้ที่กำหนดอยู่เบื้องหน้าด้วย
    • EXTRA_PROVISIONING_DEVICE_ADMIN_PACKAGE_CHECKSUM ตอนนี้ค่าเริ่มต้นคือ SHA-256 ระบบยังคงรองรับ SHA-1 เพื่อความเข้ากันได้แบบย้อนหลัง แต่จะนำออกในอนาคต EXTRA_PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM ตอนนี้ยอมรับเฉพาะ SHA-256 เท่านั้น
    • ตอนนี้ระบบได้นำ API เริ่มต้นของอุปกรณ์ที่มีอยู่ใน Android 6.0 (API ระดับ 23) ออกแล้ว
    • EXTRA_PROVISIONING_RESET_PROTECTION_PARAMETERS ถูกนำออกแล้วเพื่อให้การจัดสรรการชน NFC ปลดล็อกอุปกรณ์ที่มีการป้องกันซึ่งรีเซ็ตเป็นค่าเริ่มต้นทางโปรแกรมไม่ได้
    • ตอนนี้คุณใช้ EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE extra เพื่อส่งข้อมูลไปยังแอปเจ้าของอุปกรณ์ในระหว่างการจัดสรร NFC ของอุปกรณ์ที่มีการจัดการได้แล้ว
    • Android for Work API ได้รับการเพิ่มประสิทธิภาพสำหรับสิทธิ์รันไทม์ของ M ซึ่งรวมถึงโปรไฟล์งาน เลเยอร์ความช่วยเหลือ และอื่นๆ API สิทธิ์ DevicePolicyManager ใหม่จะไม่ส่งผลต่อแอปรุ่นก่อน M
    • เมื่อผู้ใช้ออกจากส่วนซิงโครนัสของขั้นตอนการตั้งค่าที่เริ่มต้นผ่าน Intent ACTION_PROVISION_MANAGED_PROFILE หรือ ACTION_PROVISION_MANAGED_DEVICE ตอนนี้ระบบจะส่งคืนรหัสผลลัพธ์ RESULT_CANCELED
  • การเปลี่ยนแปลง API อื่นๆ
    • การใช้ข้อมูล: ชั้นเรียน android.app.usage.NetworkUsageStats เปลี่ยนชื่อเป็น NetworkStats แล้ว
  • การเปลี่ยนแปลงการตั้งค่าส่วนกลาง
    • การตั้งค่าต่อไปนี้จะตั้งค่าผ่าน setGlobalSettings() ไม่ได้อีกต่อไป
      • BLUETOOTH_ON
      • DEVELOPMENT_SETTINGS_ENABLED
      • MODE_RINGER
      • NETWORK_PREFERENCE
      • WIFI_ON
    • ตอนนี้คุณตั้งค่าส่วนกลางเหล่านี้ผ่าน setGlobalSettings() ได้แล้ว โดยทำดังนี้