ระดับ 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
พยายามเริ่มโปรแกรมเล่นที่สองขณะที่โปรแกรมเล่นแรกหยุด
กล้อง
การเคลื่อนไหวแบบโฟกัสอัตโนมัติ
อินเทอร์เฟซใหม่ 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 และมักจะไม่ใช่ผ่านการสัมผัสหรือ เมาส์/อุปกรณ์ตัวชี้