API ของ Android 4.1

ระดับ API: 16

Android 4.1 (JELLY_BEAN) คือความก้าวหน้าของแพลตฟอร์มที่ให้ ประสิทธิภาพการทำงาน และประสบการณ์ของผู้ใช้ เพิ่มฟีเจอร์ใหม่ๆ ให้กับผู้ใช้และแอป เอกสารนี้จะให้ข้อมูลเบื้องต้นเกี่ยวกับ API ใหม่ๆ ที่เป็นประโยชน์สำหรับนักพัฒนาแอป

ในฐานะนักพัฒนาแอป คุณใช้งาน Android 4.1 ได้จาก SDK Manager เป็นอิมเมจระบบที่คุณ ทำงานในโปรแกรมจำลอง Android และแพลตฟอร์ม SDK ที่คุณสร้างแอปได้ คุณควร ดาวน์โหลดอิมเมจระบบและแพลตฟอร์มโดยเร็วที่สุดเพื่อสร้างและทดสอบ บน Android 4.1

หากต้องการเพิ่มประสิทธิภาพแอปสำหรับอุปกรณ์ที่ใช้ Android 4.1 ได้ดียิ่งขึ้น คุณควรตั้งค่า targetSdkVersion เป็น "16" ให้ติดตั้งในอิมเมจระบบ Android 4.1 แล้วเผยแพร่อัปเดตที่มีการเปลี่ยนแปลงนี้

คุณ สามารถใช้ API ใน Android 4.1 ในขณะเดียวกันก็รองรับเวอร์ชันเก่าด้วยการเพิ่ม เงื่อนไขในโค้ดของคุณที่ตรวจสอบระดับ API ของระบบก่อนดำเนินการ API ไม่รองรับใน minSdkVersion หากต้องการทราบข้อมูลเพิ่มเติมเกี่ยวกับ การรักษาความเข้ากันได้แบบย้อนหลัง โปรดอ่าน การสร้างความเข้ากันได้แบบย้อนหลัง UI

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีการทำงานของระดับ API ได้ใน API คืออะไร ระดับ

คอมโพเนนต์ของแอป

บริการแบบแยก

โดยระบุ android:isolatedProcess="true" ใน <service> Service ของคุณจะทำงานภายใต้ กระบวนการรหัสผู้ใช้แยกต่างหากที่ไม่มีสิทธิ์ของตนเอง

การจัดการหน่วยความจำ

ค่าคงที่ ComponentCallbacks2 ใหม่ เช่น TRIM_MEMORY_RUNNING_LOW และ TRIM_MEMORY_RUNNING_CRITICAL จะระบุเบื้องหน้า ประมวลผลข้อมูลเพิ่มเติมเกี่ยวกับ สถานะหน่วยความจำก่อนที่ระบบจะเรียก onLowMemory()

เมธอด getMyMemoryState(ActivityManager.RunningAppProcessInfo) ใหม่ช่วยให้คุณดำเนินการต่อไปนี้ได้ เรียกสถานะหน่วยความจำทั่วไป

ผู้ให้บริการเนื้อหา

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

วอลเปเปอร์เคลื่อนไหว

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

หากต้องการเปิดใช้งานเครื่องมือเลือกวอลเปเปอร์เคลื่อนไหว ให้เรียก startActivity() พร้อม Intent โดยใช้ ACTION_CHANGE_LIVE_WALLPAPER และบริการเสริม ที่ระบุว่าวอลเปเปอร์เคลื่อนไหว ComponentName เป็นสตริงใน EXTRA_LIVE_WALLPAPER_COMPONENT

การไปยังส่วนต่างๆ ของสแต็กแอป

Android 4.1 ช่วยให้คุณนำรูปแบบการออกแบบที่เหมาะสมสำหรับการนำทางขึ้นไปใช้ได้ง่ายขึ้น เพียงแค่เพิ่ม android:parentActivityName ลงในเอลิเมนต์ <activity> แต่ละรายการใน ไฟล์ Manifest ระบบจะใช้ข้อมูลนี้เพื่อเปิดกิจกรรมที่เหมาะสมเมื่อผู้ใช้ กดปุ่มขึ้นในแถบการทำงาน (ขณะเสร็จสิ้นกิจกรรมปัจจุบันด้วย) ดังนั้นหากคุณ ประกาศ android:parentActivityName สำหรับแต่ละกิจกรรม คุณไม่จำเป็นต้องใช้เมธอด onOptionsItemSelected() ในการจัดการการคลิก เหตุการณ์ในไอคอนแอปของแถบการทำงาน ตอนนี้ระบบจะจัดการกิจกรรมนั้น และกลับมาแสดงอีกครั้ง หรือ สร้างกิจกรรมที่เหมาะสม

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

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

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

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

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

onNavigateUp()
ลบล้างตัวเลือกนี้เพื่อดำเนินการที่กำหนดเองเมื่อผู้ใช้กดปุ่มขึ้น
navigateUpTo(Intent)
เรียกใช้เพื่อสิ้นสุดกิจกรรมปัจจุบันและไปที่กิจกรรมที่ระบุโดย Intent ที่ระบุ หากมีกิจกรรมอยู่ในแบ็กสแต็ก แต่ ไม่ใช่ผู้ปกครองที่ใกล้ที่สุด และกิจกรรมอื่นๆ ทั้งหมดระหว่างกิจกรรมปัจจุบันกับ กิจกรรมที่ระบุด้วย Intent นั้นก็เสร็จสมบูรณ์แล้วเช่นกัน
getParentActivityIntent()
เรียกใช้เพื่อรับ Intent ที่จะเริ่มตรรกะ กิจกรรมปัจจุบัน
shouldUpRecreateTask(Intent)
เรียกใช้เพื่อสืบค้นว่าต้องสร้างสแต็กด้านหลังสังเคราะห์หรือไม่เพื่อไปยังส่วนต่างๆ ขึ้น แสดงค่า "จริง" หากต้องสร้างสแต็กสังเคราะห์ ส่งคืนเป็น "เท็จ" หากสแต็กที่เหมาะสม มีอยู่แล้ว
finishAffinity()
โทรเพื่อสิ้นสุดกิจกรรมปัจจุบันและกิจกรรมของผู้ปกครองทั้งหมดด้วย งานที่เชื่อมโยงกับกิจกรรมปัจจุบัน หากคุณลบล้างการทำงานเริ่มต้น เช่น onNavigateUp() คุณควรเรียกใช้เมธอดนี้เมื่อ สร้างสแต็กด้านหลังสังเคราะห์เมื่อนำทางขึ้น
onCreateNavigateUpTaskStack
โปรดลบล้างค่านี้หากต้องการควบคุมวิธีสร้างสแต็กงานสังเคราะห์โดยสมบูรณ์ หากคุณต้องการเพียงแค่เพิ่มข้อมูลเพิ่มเติมลงใน Intent ของแบ็กสแต็ก คุณควรลบล้าง onPrepareNavigateUpTaskStack() แทน

อย่างไรก็ตาม แอปส่วนใหญ่ไม่จำเป็นต้องใช้ API เหล่านี้หรือใช้ onPrepareNavigateUpTaskStack() แต่ก็สามารถทำงานได้อย่างถูกต้องได้ง่ายๆ ด้วย กำลังเพิ่ม android:parentActivityName ลงในเอลิเมนต์ <activity> แต่ละรายการ

มัลติมีเดีย

ตัวแปลงรหัสสื่อ

คลาส MediaCodec ให้สิทธิ์เข้าถึงตัวแปลงรหัสสื่อระดับต่ำสำหรับการเข้ารหัส และถอดรหัสสื่อของคุณ คุณสามารถสร้างอินสแตนซ์ MediaCodec ได้โดยเรียกใช้ createEncoderByType() เพื่อเข้ารหัสสื่อหรือเรียกใช้ createDecoderByType() เพื่อถอดรหัสสื่อ แต่ละรายการ จะใช้ประเภท MIME สำหรับประเภทสื่อที่คุณต้องการเข้ารหัสหรือถอดรหัส เช่น "video/3gpp" หรือ "audio/vorbis"

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

ไม่ว่าคุณจะเข้ารหัสหรือถอดรหัสสื่อ ขั้นตอนที่เหลือจะยังคงเดิมหลังจากที่คุณ สร้าง MediaCodec เรียก getInputBuffers() ครั้งแรกเพื่อรับอาร์เรย์ของอินพุต ByteBuffer และ getOutputBuffers() เพื่อรับอาร์เรย์ของออบเจ็กต์ ByteBuffer เอาต์พุต

เมื่อพร้อมเข้ารหัสหรือถอดรหัสแล้ว ให้เรียกใช้ dequeueInputBuffer() เพื่อรับตำแหน่งดัชนีของ ByteBuffer (จากอาร์เรย์ของบัฟเฟอร์อินพุต) ที่คุณควรใช้เพื่อป้อนข้อมูลในแหล่งที่มา สื่อ หลังจากเพิ่มสื่อต้นฉบับลงใน ByteBuffer แล้ว ให้ปล่อยการเป็นเจ้าของ ของบัฟเฟอร์โดยเรียก queueInputBuffer()

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

คุณสามารถจัดการข้อมูลสื่อที่เข้ารหัสในตัวแปลงรหัสโดยการเรียกใช้ queueSecureInputBuffer() ร่วมกับ MediaCrypto API แทนที่จะเป็น queueInputBuffer() ปกติ

ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ตัวแปลงรหัสได้ในเอกสารประกอบของ MediaCodec

บันทึกเสียงตามคิว

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

แทร็กข้อความที่มีการกำหนดเวลา

ขณะนี้ MediaPlayer รองรับแทร็กข้อความทั้งในและนอกย่านแล้ว แทร็กข้อความในย่านความถี่จะเป็นแทร็กข้อความภายในแหล่งที่มาของสื่อ MP4 หรือ 3GPP ข้อความนอกขอบเขต เพิ่มแทร็กเป็นแหล่งที่มาข้อความภายนอกได้โดยใช้เมธอด addTimedTextSource() หลังข้อความภายนอกทั้งหมด เพิ่มแหล่งที่มาของแทร็กแล้ว ควรเรียกใช้ getTrackInfo() รายการใหม่ของแทร็กที่มีอยู่ทั้งหมดในแหล่งข้อมูล

หากต้องการตั้งค่าแทร็กเพื่อใช้กับ MediaPlayer คุณต้อง เรียก selectTrack() โดยใช้ดัชนี สำหรับแทร็กที่ต้องการใช้

หากต้องการรับการแจ้งเตือนเมื่อแทร็กข้อความพร้อมเล่น ให้ใช้ อินเทอร์เฟซและบัตรผ่านของ MediaPlayer.OnTimedTextListener ไปยัง setOnTimedTextListener()

เอฟเฟ็กต์เสียง

ชั้นเรียน AudioEffect รองรับเสียงเพิ่มเติมแล้ว ประเภทการประมวลผลล่วงหน้าเมื่อบันทึกเสียง

  • เครื่องตัดเสียงก้อง (AEC) สำหรับใช้ AcousticEchoCanceler นำการร่วมส่งสัญญาณที่ได้รับจากฝ่ายระยะไกลออกจากสัญญาณเสียงที่บันทึกไว้
  • การควบคุมค่าเกนอัตโนมัติ (AGC) ด้วย AutomaticGainControl ปรับเอาต์พุตของสัญญาณที่บันทึกไว้ให้เป็นมาตรฐานโดยอัตโนมัติ
  • ตัวลดเสียงรบกวน (NS) ที่ใช้ NoiseSuppressor นำเสียงรบกวนรอบข้างออกจากสัญญาณที่บันทึกไว้

คุณสามารถใช้เอฟเฟกต์โปรเซสเซอร์ล่วงหน้าเหล่านี้กับเสียงที่บันทึกด้วย AudioRecord ได้โดยใช้หนึ่งใน AudioEffect คลาสย่อย

หมายเหตุ: เราไม่รับประกันว่าอุปกรณ์จะรองรับ ดังนั้นคุณควรตรวจสอบความพร้อมใช้งานโดยโทรหา isAvailable() บนอุปกรณ์ที่เกี่ยวข้อง คลาสเอฟเฟกต์เสียง

เล่นได้ราบรื่น

ตอนนี้คุณสามารถเล่นได้อย่างราบรื่นระหว่าง ออบเจ็กต์ MediaPlayer รายการ ได้ทุกเมื่อก่อนที่ MediaPlayer แรกจะเสร็จสิ้น โทรหา setNextMediaPlayer() และ Android พยายามเริ่มโปรแกรมเล่นที่สองขณะที่โปรแกรมเล่นแรกหยุด

เราเตอร์สื่อ API ใหม่อย่าง MediaRouter, MediaRouteActionProvider และ MediaRouteButton มีทั้ง กลไกมาตรฐานและ UI สำหรับการเลือกตำแหน่งที่จะเล่นสื่อ

กล้อง

การเคลื่อนไหวแบบโฟกัสอัตโนมัติ

อินเทอร์เฟซใหม่ Camera.AutoFocusMoveCallback ให้คุณฟัง เพื่อเปลี่ยนการเคลื่อนที่ของโฟกัสอัตโนมัติ คุณสามารถลงทะเบียนอินเทอร์เฟซกับ setAutoFocusMoveCallback() ได้ จากนั้นเมื่อกล้อง อยู่ในโหมดโฟกัสอัตโนมัติแบบต่อเนื่อง (FOCUS_MODE_CONTINUOUS_VIDEO หรือ FOCUS_MODE_CONTINUOUS_PICTURE) คุณจะได้รับสายเรียกเข้า ถึง onAutoFocusMoving() ซึ่งจะบอกว่าการโฟกัสอัตโนมัติได้เริ่มเคลื่อนไหวหรือหยุดเคลื่อนที่แล้ว

เสียงกล้อง

คลาส MediaActionSound มีชุด API ง่ายๆ สำหรับสร้าง เสียงมาตรฐานที่กล้องหรือการทำงานอื่นๆ ของสื่อทำขึ้น คุณควรใช้ API เหล่านี้เพื่อเล่น เสียงที่เหมาะสมเมื่อสร้างกล้องนิ่งหรือกล้องวิดีโอแบบกำหนดเอง

หากต้องการเล่นเสียง เพียงสร้างอินสแตนซ์ออบเจ็กต์ MediaActionSound load() เพื่อโหลดเสียงที่ต้องการไว้ล่วงหน้า จากนั้นที่ ตามเวลาที่เหมาะสม โทรติดต่อ play()

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

Android Beam

AndroidบีมTM สนับสนุนการโอนเพย์โหลดขนาดใหญ่ผ่านบลูทูธแล้ว เมื่อคุณกำหนดข้อมูล เพื่อโอนไปยัง setBeamPushUris() ใหม่ หรืออินเทอร์เฟซเรียกกลับใหม่ NfcAdapter.CreateBeamUrisCallback, Android ส่งต่อการถ่ายโอนข้อมูลไปยังบลูทูธหรือการส่งอื่นไปยัง โอนข้อมูลได้เร็วขึ้น ซึ่งจะเป็นประโยชน์อย่างยิ่งสำหรับเพย์โหลดขนาดใหญ่ เช่น รูปภาพและ ไฟล์เสียงและไม่จำเป็นต้องมีการจับคู่ระหว่างอุปกรณ์ คุณไม่ต้องดำเนินการเพิ่มเติมใดๆ แอปของคุณเพื่อใช้ประโยชน์จากการโอนผ่านบลูทูธ

เมธอด setBeamPushUris() ใช้อาร์เรย์ของ Uri ออบเจ็กต์ที่ระบุข้อมูลที่คุณต้องการโอนจากแอป หรือคุณสามารถใช้ NfcAdapter.CreateBeamUrisCallback ซึ่งคุณระบุกิจกรรมได้โดยเรียกใช้ setBeamPushUrisCallback()

เมื่อใช้ Callback อินเทอร์เฟซ ระบบจะเรียกใช้เมธอด createBeamUris() ของอินเทอร์เฟซเมื่อ ผู้ใช้เรียกใช้การแชร์กับ Android Beam เพื่อให้คุณสามารถกำหนด URI ที่จะแชร์ในเวลาแชร์ วิธีนี้มีประโยชน์หาก URI ที่จะแชร์อาจแตกต่างกันไปตามบริบทของผู้ใช้ภายใน กิจกรรมในขณะที่การโทร setBeamPushUris() มีค่า มีประโยชน์เมื่อ URI ที่จะแชร์ไม่เปลี่ยนแปลง และคุณสามารถกำหนด URI นั้นล่วงหน้าได้อย่างปลอดภัย

การค้นหาบริการเครือข่าย

Android 4.1 เพิ่มการสนับสนุนสำหรับการค้นพบบริการแบบมัลติแคสต์ DNS ซึ่งช่วยให้คุณ ค้นหาและเชื่อมต่อกับบริการที่นำเสนอโดยอุปกรณ์เพียร์ผ่าน Wi-Fi เช่น อุปกรณ์เคลื่อนที่ เครื่องพิมพ์ กล้อง มีเดียเพลเยอร์ และอื่นๆ ที่ลงทะเบียนในเครือข่ายท้องถิ่น

แพ็กเกจใหม่ android.net.nsd มี API ใหม่ที่ช่วยให้คุณดำเนินการต่อไปนี้ได้ เผยแพร่บริการในเครือข่าย LAN ค้นพบอุปกรณ์ในเครือข่ายเดียวกัน และ เชื่อมต่อกับอุปกรณ์

หากต้องการลงทะเบียนบริการ คุณต้องสร้าง NsdServiceInfo ก่อน และระบุคุณสมบัติต่างๆ ของบริการของคุณด้วยวิธีการต่างๆ เช่น setServiceName(), setServiceType() และ setPort()

จากนั้นคุณต้องติดตั้งใช้งาน NsdManager.RegistrationListener และส่งไปยัง registerService() ด้วย NsdServiceInfo ของคุณ

หากต้องการค้นหาบริการในเครือข่าย ให้ใช้ NsdManager.DiscoveryListener และส่งไปยัง discoverServices()

เมื่อ NsdManager.DiscoveryListener ได้รับการติดต่อกลับเกี่ยวกับบริการ พบ คุณต้องแก้ไขบริการโดยการโทร resolveService() ส่งคะแนน การใช้งาน NsdManager.ResolveListener ที่ได้รับ ออบเจ็กต์ NsdServiceInfo ที่มีข้อมูลเกี่ยวกับ ค้นพบบริการ ซึ่งทำให้คุณสามารถเริ่มการเชื่อมต่อ

การค้นหาบริการ Wi-Fi P2P

Wi-Fi P2P API ได้รับการปรับปรุงใน Android 4.1 เพื่อรองรับการค้นหาบริการก่อนการเชื่อมโยงใน WifiP2pManager ซึ่งจะช่วยให้คุณค้นพบและกรองสถานที่ใกล้เคียงได้ อุปกรณ์ตามบริการที่ใช้ Wi-Fi P2P ก่อนเชื่อมต่อกับอุปกรณ์ใดอุปกรณ์หนึ่ง ขณะที่บริการเครือข่าย การค้นพบช่วยให้คุณค้นพบบริการในเครือข่ายที่เชื่อมต่อที่มีอยู่ (เช่น Wi-Fi ในพื้นที่) เครือข่าย)

เผยแพร่แอปของคุณในรูปแบบบริการผ่าน Wi-Fi เพื่อให้อุปกรณ์อื่นๆ ค้นพบได้ แอปของคุณและเชื่อมต่อ ให้โทรหา addLocalService() พร้อม WifiP2pServiceInfo ที่อธิบายบริการของแอปของคุณ

เพื่อเริ่มค้นหาอุปกรณ์ใกล้เคียงผ่าน Wi-Fi ก่อนอื่นคุณต้องตัดสินใจ สื่อสารโดยใช้ Bonjour หรือ Upnp หากต้องการใช้ Bonjour ให้ตั้งค่า Listener ของ Callback ก่อนโดยใช้ setDnsSdResponseListeners() ซึ่งจะมีทั้ง WifiP2pManager.DnsSdServiceResponseListener และ WifiP2pManager.DnsSdTxtRecordListener หากต้องการใช้ Upnp โปรดโทร setUpnpServiceResponseListener() ซึ่งต้องใช้ WifiP2pManager.UpnpServiceResponseListener

ก่อนเริ่มค้นหาบริการในอุปกรณ์ในพื้นที่ คุณต้องโทรหา addServiceRequest() ด้วย เมื่อ WifiP2pManager.ActionListener ที่คุณส่งไปยังเมธอดนี้ได้รับ ติดต่อกลับสำเร็จ จากนั้นคุณจะเริ่มค้นพบบริการในอุปกรณ์ในพื้นที่ได้โดยโทรไปที่ discoverServices()

เมื่อพบบริการในพื้นที่ คุณจะได้รับการติดต่อกลับทาง WifiP2pManager.DnsSdServiceResponseListener หรือ WifiP2pManager.UpnpServiceResponseListener โดยขึ้นอยู่กับว่าคุณ ลงทะเบียนเพื่อใช้ Bonjour หรือ Upnp แล้ว Callback ที่ได้รับในทั้ง 2 กรณีมี ออบเจ็กต์ WifiP2pDevice รายการที่แสดงถึงอุปกรณ์เพียร์

การใช้งานเครือข่าย

เมธอดใหม่ isActiveNetworkMetered() ช่วยให้คุณดำเนินการต่อไปนี้ได้ ให้ตรวจสอบว่าอุปกรณ์เชื่อมต่อกับเครือข่ายแบบจำกัดปริมาณอยู่หรือไม่ เมื่อตรวจสอบสถานะนี้ ก่อนที่จะดำเนินธุรกรรมเครือข่ายที่มีปริมาณสูงได้ คุณสามารถช่วยจัดการการใช้ข้อมูลที่อาจทำให้ผู้ใช้ต้องเสียค่าใช้จ่าย และทำให้ ข้อมูลประกอบการตัดสินใจว่าควรทำธุรกรรมเดี๋ยวนี้หรือในภายหลัง (เช่น เมื่อ อุปกรณ์เชื่อมต่อกับ Wi-Fi แล้ว)

การช่วยเหลือพิเศษ

API บริการช่วยเหลือพิเศษ

การเข้าถึง API ของบริการช่วยเหลือพิเศษเพิ่มขึ้นอย่างมากใน Android 4.1 เดี๋ยวนี้ ช่วยให้คุณสร้างบริการที่ตรวจสอบและตอบสนองต่อเหตุการณ์อินพุตอื่นๆ ได้ เช่น ท่าทางสัมผัสที่ซับซ้อน โดยใช้ onGesture() และอื่นๆ ป้อนข้อมูลเหตุการณ์ผ่านการเพิ่มชั้นเรียน AccessibilityEvent, AccessibilityNodeInfo และ AccessibilityRecord

บริการช่วยเหลือพิเศษยังสามารถดำเนินการต่างๆ ในนามของผู้ใช้ เช่น การคลิก การเลื่อนและผ่านข้อความโดยใช้ performAction และ setMovementGranularities เมธอด performGlobalAction() ยังช่วยให้บริการต่างๆ เช่น กลับ หน้าแรก และเปิดรายการล่าสุด แอปและการแจ้งเตือน

การไปยังส่วนต่างๆ ของแอปที่ปรับแต่งได้

เมื่อสร้างแอป Android คุณปรับแต่งแผนการนำทางได้แล้วโดยค้นหาจุดที่โฟกัสได้ องค์ประกอบและวิดเจ็ตอินพุตโดยใช้ findFocus() และ focusSearch() และตั้งค่าโฟกัส โดยใช้ setAccessibilityFocused()

วิดเจ็ตที่เข้าถึงได้ง่ายมากขึ้น

ชั้นเรียน android.view.accessibility.AccessibilityNodeProvider ใหม่จะช่วยให้คุณ แสดงมุมมองที่กำหนดเองที่ซับซ้อนของบริการการช่วยเหลือพิเศษ เพื่อที่จะได้นำเสนอข้อมูลใน วิธีเข้าถึงได้ง่ายขึ้น android.view.accessibility.AccessibilityNodeProvider อนุญาตให้ผู้ใช้ วิดเจ็ตที่มีเนื้อหาขั้นสูง เช่น ตารางปฏิทิน เพื่อแสดงโครงสร้างทางอรรถศาสตร์เชิงตรรกะสำหรับ บริการการช่วยเหลือพิเศษที่แยกออกจากโครงสร้างเลย์เอาต์ของวิดเจ็ตโดยสิ้นเชิง ความหมายนี้ โครงสร้างช่วยให้บริการการช่วยเหลือพิเศษสามารถนำเสนอ รูปแบบการโต้ตอบ ที่มีประโยชน์มากขึ้นสำหรับผู้ใช้ที่ มีความบกพร่องทางสายตา

คัดลอกและวาง

คัดลอกและวางด้วย Intent

คุณสามารถเชื่อมโยงออบเจ็กต์ ClipData กับ Intent โดยใช้เมธอด setClipData() ได้แล้ว ซึ่งจะเป็นประโยชน์อย่างยิ่งเมื่อใช้ Intent ในการโอน URI หลายรายการของ content: ไปยัง URL อื่น แอปพลิเคชัน เช่น เมื่อแชร์เอกสารหลายฉบับ URI content: ที่ระบุ วิธีนี้จะเคารพสถานะของ Intent เพื่อเสนอสิทธิ์อ่านหรือเขียน ซึ่งทำให้คุณสามารถ เข้าถึง URI หลายรายการใน Intent เมื่อเริ่ม Intent ACTION_SEND หรือ ACTION_SEND_MULTIPLE แล้ว URI ที่ให้ไว้ใน Intent จะเป็น ไปยัง ClipData โดยอัตโนมัติเพื่อให้ผู้รับมี ที่มอบให้แก่ตน

การสนับสนุนรูปแบบ HTML และสตริง

คลาส ClipData รองรับข้อความที่จัดรูปแบบแล้ว (ไม่ว่าจะเป็น HTML หรือ สไตล์Android สตริง) คุณสามารถเพิ่มข้อความที่มีการจัดรูปแบบ HTML ไปยัง ClipData ด้วย newHtmlText()

Renderscript

ฟังก์ชันการคำนวณ Renderscript ได้รับการปรับปรุงให้ดีขึ้นด้วยฟีเจอร์ต่อไปนี้

  • สนับสนุนหลายเคอร์เนลภายในสคริปต์เดียว
  • การรองรับการอ่านจากการจัดสรรด้วยตัวสุ่มตัวอย่างที่กรองจากการประมวลผลในสคริปต์ API ใหม่ rsSample
  • รองรับระดับความแม่นยำของ FP ที่ต่างกันใน #pragma
  • รองรับการค้นหาข้อมูลเพิ่มเติมจากออบเจ็กต์ RS จากสคริปต์ประมวลผล
  • การปรับปรุงประสิทธิภาพในหลายๆ ด้าน

นอกจากนี้ยังมีเครื่องมือใหม่ที่ใช้กำหนดความแม่นยำของจุดลอยตัวตามที่ Renderscript ของการประมวลผล การดำเนินการนี้จะช่วยให้คุณเปิดใช้ NEON เช่น การดำเนินการต่างๆ เช่น การคำนวณเวกเตอร์แบบรวดเร็ว บนเส้นทาง CPU ที่ไม่สามารถทำได้หากใช้มาตรฐาน IEEE 754-2008 แบบเต็ม

หมายเหตุ: เครื่องมือกราฟิก Renderscript รุ่นทดลองพร้อมใช้งานแล้ว เลิกใช้งานแล้ว

แอนิเมชัน

ภาพเคลื่อนไหวแสดงกิจกรรม

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

คลาส ActivityOptions มีวิธีการที่แตกต่างกันสำหรับแต่ละรายการ ประเภทของภาพเคลื่อนไหวที่คุณอาจต้องการแสดงเมื่อกิจกรรมเปิดขึ้น

makeScaleUpAnimation()
สร้างภาพเคลื่อนไหวที่ปรับขนาดหน้าต่างกิจกรรมจากช่วงเริ่มต้นที่ระบุ ตำแหน่งบนหน้าจอและขนาดเริ่มต้นที่ระบุ เช่น หน้าจอหลักใน Android 4.1 จะใช้ข้อมูลนี้เมื่อเปิดแอป
makeThumbnailScaleUpAnimation()
สร้างภาพเคลื่อนไหวที่ขยายขนาดหน้าต่างกิจกรรมโดยเริ่มจาก และภาพขนาดย่อที่ให้ไว้ ตัวอย่างเช่น หน้าต่างแอปล่าสุดใน และ Android 4.1 ก็ใช้ตัวเลือกนี้เมื่อกลับไปใช้แอป
makeCustomAnimation()
สร้างภาพเคลื่อนไหวที่กำหนดโดยทรัพยากรของคุณเอง ได้แก่ ภาพเคลื่อนไหวที่กำหนดภาพเคลื่อนไหวสำหรับ กิจกรรมที่เปิดและอีกกิจกรรมหนึ่งสำหรับกิจกรรมที่หยุด

ตัวสร้างเวลา

TimeAnimator ใหม่ช่วยให้ติดต่อกลับได้อย่างง่ายดาย ที่มี TimeAnimator.TimeListener ที่แจ้งเตือน ให้คุณดูทุกเฟรมของภาพเคลื่อนไหวได้ ภาพเคลื่อนไหวนี้ไม่มีการตั้งค่าระยะเวลา การประมาณค่า หรือค่าวัตถุ Callback ของผู้ฟังจะได้รับข้อมูลสำหรับแต่ละเฟรม ซึ่งรวมถึง เวลาที่ผ่านไปทั้งหมดและเวลาที่ผ่านไปตั้งแต่เฟรมของภาพเคลื่อนไหวก่อนหน้านี้

อินเทอร์เฟซผู้ใช้

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

ใน Android 4.1 คุณสามารถสร้างการแจ้งเตือนที่มีขอบเขตเนื้อหาที่กว้างขึ้น ตัวอย่างรูปภาพขนาดใหญ่ ปุ่มการทำงานต่างๆ และลำดับความสำคัญที่กำหนดค่าได้

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

เมธอดใหม่ setStyle() ช่วยให้คุณระบุ การแจ้งเตือน 1 ใน 3 สไตล์ใหม่ซึ่งแต่ละสไตล์มีขอบเขตเนื้อหาที่ใหญ่กว่า ถึง ระบุรูปแบบสำหรับขอบเขตเนื้อหาขนาดใหญ่ แล้วส่ง setStyle() ออบเจ็กต์ต่อไปนี้

Notification.BigPictureStyle
สำหรับการแจ้งเตือนที่มีไฟล์แนบรูปภาพขนาดใหญ่
Notification.BigTextStyle
สำหรับการแจ้งเตือนที่มีข้อความจำนวนมาก เช่น อีเมลฉบับเดียว
Notification.InboxStyle
สำหรับการแจ้งเตือนที่มีรายการสตริง เช่น ตัวอย่างข้อมูลจากอีเมลหลายฉบับ
การดำเนินการกับการแจ้งเตือน

ขณะนี้มีการสนับสนุนปุ่มการทำงานสูงสุดสองปุ่มซึ่งปรากฏที่ด้านล่างของ ข้อความแจ้งเตือนของคุณ ไม่ว่าการแจ้งเตือนจะใช้รูปแบบปกติหรือใหญ่กว่า

หากต้องการเพิ่มปุ่มการทำงาน โปรดโทรหา addAction() วิธีนี้มีอาร์กิวเมนต์ 3 ตัว ได้แก่ ทรัพยากรที่ถอนออกได้สำหรับไอคอน ข้อความสำหรับปุ่ม และ PendingIntent ที่กำหนดการดำเนินการ เป็น Perfrom

ลำดับความสำคัญ

ตอนนี้คุณสามารถบอกระบบได้ว่าการแจ้งเตือนของคุณส่งผลต่อ ลำดับของการแจ้งเตือนในรายการโดยการตั้งค่า setPriority() เป็นอันดับหนึ่ง คุณ สามารถส่งผ่านลำดับความสำคัญหนึ่งใน 5 ระดับ ซึ่งกำหนดโดยค่าคงที่ PRIORITY_* ในชั้นเรียน Notification ค่าเริ่มต้นคือ PRIORITY_DEFAULT ซึ่งอีก 2 ระดับจะสูงกว่าและต่ำกว่าอีก 2 ระดับ

การแจ้งเตือนที่มีลำดับความสำคัญสูงคือสิ่งที่ผู้ใช้มักต้องการตอบสนองอย่างรวดเร็ว เช่น ข้อความโต้ตอบแบบทันที, SMS ใหม่ หรือการช่วยเตือนกิจกรรมที่กำลังจะเกิดขึ้น ลำดับความสำคัญต่ำ การแจ้งเตือนคือสิ่งต่างๆ เช่น กิจกรรมในปฏิทินที่หมดอายุหรือการโปรโมตแอป

การควบคุมสำหรับ UI ของระบบ

Android 4.0 (Ice Cream Sandwich) เพิ่มแฟล็กใหม่เพื่อควบคุมการเปิดเผย UI ของระบบ เช่น เพื่อทำให้แถบระบบจางลงหรือทำให้หายไปโดยสิ้นเชิงบนโทรศัพท์มือถือ แอนดรอยด์ 4.1 มีการเพิ่มค่าสถานะอีกเล็กน้อย ซึ่งช่วยให้คุณควบคุมลักษณะของระบบได้มากขึ้น องค์ประกอบ UI และเลย์เอาต์กิจกรรมของคุณที่เกี่ยวข้องกับองค์ประกอบเหล่านั้นโดยการเรียกใช้ setSystemUiVisibility() และส่งค่าสถานะต่อไปนี้

SYSTEM_UI_FLAG_FULLSCREEN
ซ่อน UI ของระบบที่ไม่สำคัญ (เช่น แถบสถานะ) หากกิจกรรมของคุณใช้แถบการทำงานในโหมดวางซ้อน (โดย เปิดใช้ android:windowActionBarOverlay) ธงนี้จะซ่อนแถบการทำงานและ แสดงภาพเคลื่อนไหวที่ประสานกัน เมื่อทั้งซ่อนและแสดง
SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
ตั้งค่ารูปแบบกิจกรรมให้ใช้พื้นที่หน้าจอเดียวกับที่มีเมื่อคุณ เปิดใช้ SYSTEM_UI_FLAG_FULLSCREEN แม้ว่าองค์ประกอบ UI ของระบบ ยังคงมองเห็นได้อยู่ แม้ว่าบางส่วนในเลย์เอาต์จะถูกวางซ้อนด้วยองค์ประกอบ UI ของระบบ วิธีการนี้จะเป็นประโยชน์หากแอปของคุณมักจะซ่อนและแสดง UI ของระบบด้วย SYSTEM_UI_FLAG_FULLSCREEN เนื่องจากเลี่ยงการออกแบบจาก ปรับให้เข้ากับขอบเขตของเลย์เอาต์ใหม่ทุกครั้งที่ UI ของระบบซ่อนหรือปรากฏขึ้น
SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
ตั้งค่ารูปแบบกิจกรรมให้ใช้พื้นที่หน้าจอเดียวกับที่มีเมื่อคุณ เปิดใช้ SYSTEM_UI_FLAG_HIDE_NAVIGATION (เพิ่มใน Android 4.0) แม้องค์ประกอบ UI ของระบบจะยังแสดงอยู่ แม้ว่าบางส่วนในเลย์เอาต์จะ ซึ่งวางซ้อนด้วย แถบนำทาง ตัวเลือกนี้มีประโยชน์หากแอปมักซ่อนและแสดงแถบนำทาง กับ SYSTEM_UI_FLAG_HIDE_NAVIGATION เนื่องจากเลี่ยงการออกแบบจาก ซึ่งปรับตามขอบเขตของการออกแบบใหม่ทุกครั้งที่แถบนำทางซ่อนหรือปรากฏขึ้น
SYSTEM_UI_FLAG_LAYOUT_STABLE
คุณควรเพิ่มแฟล็กนี้หากใช้ SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN และ/หรือ SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION เพื่อให้มั่นใจว่าเมื่อโทรติดต่อ fitSystemWindows() ในมุมมองที่ ขอบเขตที่กำหนดจะยังคงสอดคล้องกันตามพื้นที่หน้าจอที่มีอยู่ ซึ่งหมายความว่าเมื่อตั้งค่าแฟล็กนี้ fitSystemWindows() จะทํางานเสมือนว่าระดับการเข้าถึงขององค์ประกอบ UI ของระบบไม่มีการเปลี่ยนแปลง แม้หลังจากที่คุณซ่อน UI ของระบบทั้งหมดแล้ว

สำหรับการสนทนาเพิ่มเติมเกี่ยวกับ Flag ระบบ UI อื่นๆ ที่เกี่ยวข้อง โปรดอ่านเกี่ยวกับ แอปที่เพิ่มเข้ามาใน Android 4.0

มุมมองระยะไกล

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

ชุดแบบอักษร

Android 4.1 ได้เพิ่มรูปแบบแบบอักษร Roboto หลายรูปแบบ รวมแล้วมีรูปแบบทั้งหมด 10 แบบ ซึ่งทุกแอปใช้งานได้ ตอนนี้แอปของคุณเข้าถึงทั้งไฟและ ตัวแปรแบบย่อ

ชุดตัวแปรแบบอักษร Roboto ทั้งหมดที่พร้อมใช้งานมีดังนี้

  • ปกติ
  • ตัวเอียง
  • ตัวหนา
  • ตัวหนา-ตัวเอียง
  • น้อย
  • ตัวเอียงอ่อน
  • แบบย่อปกติ
  • ตัวเอียงแบบย่อ
  • ตัวหนาแบบย่อ
  • ตัวหนา-ตัวเอียงแบบย่อ

คุณสามารถใช้รายการใดก็ได้ต่อไปนี้กับ fontFamily ใหม่ ร่วมกับแอตทริบิวต์ textStyle

ค่าที่รองรับสำหรับ fontFamily มีดังนี้

  • "sans-serif" สำหรับ Roboto ปกติ
  • "sans-serif-light" สำหรับ Roboto Light
  • "sans-serif-condensed" สำหรับ Roboto Condensed

จากนั้นจะใช้ตัวหนาและ/หรือตัวเอียงกับค่า textStyle ได้ "bold" และ "italic" คุณใช้ได้ทั้ง 2 อย่างต่อไปนี้ android:textStyle="bold|italic"

หรือคุณจะใช้ Typeface.create() ก็ได้ เช่น Typeface.create("sans-serif-light", Typeface.NORMAL)

เฟรมเวิร์กอินพุต

อุปกรณ์อินพุตหลายอุปกรณ์

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

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

หากต้องการให้มีการแจ้งเตือนเมื่อมีการเชื่อมต่อ เปลี่ยนแปลง หรือเลิกเชื่อมต่ออุปกรณ์อินพุตใหม่ ใช้อินเทอร์เฟซ InputManager.InputDeviceListener และ โปรดลงทะเบียนด้วย registerInputDeviceListener()

สั่นสำหรับตัวควบคุมอินพุต

หากอุปกรณ์อินพุตที่เชื่อมต่อมีความสามารถในการสั่นเฉพาะ คุณสามารถควบคุมอุปกรณ์ การสั่นของอุปกรณ์เหล่านั้นโดยใช้ Vibrator API ที่มีอยู่ โดยโทรหา getVibrator() ในInputDevice

สิทธิ์

สิทธิ์ใหม่มีดังต่อไปนี้

READ_EXTERNAL_STORAGE
ให้สิทธิ์การเข้าถึงที่จัดเก็บข้อมูลภายนอกที่มีการป้องกัน ใน Android 4.1 โดย ค่าเริ่มต้นแอปพลิเคชันทั้งหมดยังคงมีการอ่าน สิทธิ์การเข้าถึง จะมีการเปลี่ยนแปลงในรุ่นต่อๆ ไปเพื่อกำหนดให้แอปพลิเคชันต้องส่งคำขออย่างชัดแจ้ง สิทธิ์การอ่านโดยใช้สิทธิ์นี้ หากแอปพลิเคชันของคุณขอสิทธิ์การเขียนแล้ว จะได้รับสิทธิ์อ่านโดยอัตโนมัติด้วย มีตัวเลือกใหม่สำหรับนักพัฒนาซอฟต์แวร์เพื่อเปิดใช้การเข้าถึงการอ่าน เพื่อให้นักพัฒนาซอฟต์แวร์ทดสอบแอปพลิเคชันของตนกับลักษณะการทำงานของ Android ในอนาคต
android.Manifest.permission.READ_USER_DICTIONARY
อนุญาตให้แอปพลิเคชันอ่านพจนานุกรมผู้ใช้ เฉพาะผู้ดูแลระบบ IME หรือเครื่องมือแก้ไขพจนานุกรม เช่น แอปการตั้งค่า
READ_CALL_LOG
อนุญาตให้แอปพลิเคชันอ่านบันทึกการโทรของระบบซึ่งมีข้อมูลเกี่ยวกับ สายเรียกเข้าและสายโทรออก
WRITE_CALL_LOG
อนุญาตให้แอปพลิเคชันแก้ไขบันทึกการโทรของระบบที่เก็บไว้ในโทรศัพท์
android.Manifest.permission.WRITE_USER_DICTIONARY
อนุญาตให้แอปพลิเคชันเขียนลงในพจนานุกรมคำของผู้ใช้

ฟีเจอร์ของอุปกรณ์

Android 4.1 มีการประกาศฟีเจอร์ใหม่สำหรับอุปกรณ์ที่มีไว้สำหรับ การแสดงอินเทอร์เฟซผู้ใช้บนหน้าจอทีวี: FEATURE_TELEVISION ในการประกาศว่าแอปของคุณต้องใช้ อินเทอร์เฟซทีวี ให้ประกาศฟีเจอร์นี้ในไฟล์ Manifest ที่มีเอลิเมนต์ <uses-feature> ดังนี้

<manifest ... >
    <uses-feature android:name="android.hardware.type.television"
                  android:required="true" />
    ...
</manifest>

ฟีเจอร์นี้ให้คำจำกัดความของคำว่า "ทีวี" ประสบการณ์การรับชมโทรทัศน์ในห้องนั่งเล่นทั่วไป: แสดงบนหน้าจอขนาดใหญ่ซึ่งผู้ใช้นั่งอยู่ไกลๆ และ ป้อนข้อมูลในลักษณะเช่น D-pad และมักจะไม่ใช่ผ่านการสัมผัสหรือ เมาส์/อุปกรณ์ตัวชี้