ระดับ API: 14
Android 4.0 (ICE_CREAM_SANDWICH
)
เป็นการเปิดตัวแพลตฟอร์มหลักที่เพิ่มฟีเจอร์ใหม่ๆ มากมายให้แก่ผู้ใช้และแอป
นอกจากฟีเจอร์ใหม่และ API ทั้งหมดที่กล่าวถึงด้านล่างแล้ว Android 4.0 ก็สำคัญ
ที่เปิดตัวแพลตฟอร์มเนื่องจากมี API และธีมโฮโลกราฟที่หลากหลายจาก Android 3.x
ไปจนถึงหน้าจอขนาดเล็ก ในฐานะนักพัฒนาแอป ตอนนี้คุณมีแพลตฟอร์มเดียวและเฟรมเวิร์ก API แบบรวม
ที่ช่วยให้คุณสามารถพัฒนาและเผยแพร่แอปพลิเคชันด้วย APK เดียวที่ให้
เพิ่มประสิทธิภาพประสบการณ์ของผู้ใช้สำหรับโทรศัพท์มือถือ แท็บเล็ต และอื่นๆ เมื่อใช้
Android - Android 4.0 (API ระดับ 14) ขึ้นไป
สำหรับนักพัฒนาซอฟต์แวร์ แพลตฟอร์ม Android 4.0 มีให้บริการเป็น คอมโพเนนต์ที่ดาวน์โหลดได้สำหรับ Android SDK แพลตฟอร์มที่ดาวน์โหลดได้ประกอบด้วย ไลบรารี Android และรูปภาพระบบ รวมถึงชุดสกินโปรแกรมจำลองและ และอีกมากมาย เพื่อเริ่มพัฒนาหรือทดสอบกับ Android 4.0 ใช้ Android SDK Manager เพื่อดาวน์โหลดแพลตฟอร์มนั้นลงใน SDK ของคุณ
ภาพรวมของ API
ส่วนต่างๆ ด้านล่างจะแสดงภาพรวมทางเทคนิคของ API ใหม่ใน Android 4.0
API โซเชียลในผู้ให้บริการรายชื่อติดต่อ
API รายชื่อติดต่อที่กำหนดโดยผู้ให้บริการ ContactsContract
ได้รับการ
ขยายไปเพื่อรองรับฟีเจอร์ใหม่ๆ ที่มุ่งเน้นทางสังคม เช่น โปรไฟล์ส่วนตัวสำหรับเจ้าของอุปกรณ์และ
ผู้ใช้สามารถเชิญผู้ติดต่อแต่ละคนไปยังเครือข่ายสังคมที่ติดตั้งใน
อุปกรณ์
โปรไฟล์ผู้ใช้
ขณะนี้ Android มีโปรไฟล์ส่วนตัวที่แสดงถึงเจ้าของอุปกรณ์ตามที่กำหนดโดย
ตาราง ContactsContract.Profile
แอปโซเชียลที่คงตัวตนของผู้ใช้
มีส่วนร่วมกับข้อมูลโปรไฟล์ของผู้ใช้ได้โดยการสร้างรายการ ContactsContract.RawContacts
ใหม่ภายใน ContactsContract.Profile
กล่าวคือ รายชื่อติดต่อดิบที่แสดงถึงอุปกรณ์ที่ผู้ใช้ทำ
ไม่อยู่ในตารางข้อมูลติดต่อดิบแบบดั้งเดิมที่กำหนดโดย ContactsContract.RawContacts
URI คุณต้องเพิ่มรายชื่อติดต่อข้อมูลดิบของโปรไฟล์ใน
โต๊ะที่ CONTENT_RAW_CONTACTS_URI
ดิบ
ที่อยู่ติดต่อในตารางนี้จะถูกรวมไว้ในโปรไฟล์ที่ผู้ใช้มองเห็นได้หนึ่งโปรไฟล์ ซึ่งมีข้อความว่า "ฉัน"
การเพิ่มข้อมูลติดต่อดิบใหม่สำหรับโปรไฟล์จำเป็นต้องมี สิทธิ์ android.Manifest.permission#WRITE_PROFILE ในทำนองเดียวกัน เพื่อให้อ่านจากโปรไฟล์ได้ คุณต้องขอสิทธิ์ android.Manifest.permission#READ_PROFILE อย่างไรก็ตาม แอปส่วนใหญ่ไม่จำเป็นต้องอ่านโปรไฟล์ผู้ใช้ แม้จะให้ข้อมูลเกี่ยวกับ โปรไฟล์ การอ่านโปรไฟล์ผู้ใช้เป็นสิทธิ์ที่มีความละเอียดอ่อนและคุณควรคาดหวังว่าผู้ใช้จะได้รับ แอปที่ขอแอปดังกล่าว
เชิญชวนความตั้งใจ
การดำเนินการ INVITE_CONTACT
ของ Intent ช่วยให้แอป
เพื่อเรียกใช้การดำเนินการที่บ่งชี้ว่าผู้ใช้ต้องการเพิ่มรายชื่อติดต่อลงในโซเชียลเน็ตเวิร์ก แอป
การรับแอปพลิเคชันจะใช้แอปพลิเคชันเพื่อเชิญผู้ติดต่อที่ระบุให้เข้าร่วม
เครือข่ายสังคม แอปส่วนใหญ่จะอยู่ฝั่งรับของการดำเนินการนี้ ตัวอย่างเช่น พารามิเตอร์
แอป People ในตัวเรียกใช้ความตั้งใจในการเชิญเมื่อผู้ใช้เลือก "เพิ่มการเชื่อมต่อ" สำหรับ
แอปโซเชียลที่แสดงในรายละเอียดการติดต่อของบุคคล
วิธีทำให้แอปปรากฏในส่วน "เพิ่มการเชื่อมต่อ" แอปของคุณต้องมีอะแดปเตอร์การซิงค์กับ
ซิงค์ข้อมูลการติดต่อจาก
เครือข่ายสังคมของคุณ จากนั้นคุณต้องระบุต่อระบบว่า
แอปตอบสนองต่อ Intent INVITE_CONTACT
ด้วยวิธี
การเพิ่มแอตทริบิวต์ inviteContactActivity
ลงในไฟล์การกำหนดค่าการซิงค์ของแอป
ชื่อที่สมบูรณ์ของกิจกรรมที่ระบบควรเริ่มต้นเมื่อส่งความตั้งใจในการเชิญ
กิจกรรมที่เริ่มต้นจะสามารถเรียก URI สำหรับรายชื่อติดต่อที่เป็นปัญหาจาก
และดำเนินการที่จำเป็นเพื่อเชิญผู้ติดต่อให้เข้าร่วมเครือข่ายหรือเพิ่มบุคคลลงใน
การเชื่อมต่อของผู้ใช้
รูปภาพขนาดใหญ่
ขณะนี้ Android รองรับรูปภาพความละเอียดสูงสำหรับรายชื่อติดต่อแล้ว ทีนี้เมื่อคุณใส่รูปภาพลงใน
บันทึกรายชื่อติดต่อ ระบบจะประมวลผลเป็นภาพขนาดย่อทั้งขนาด 96x96 (ตามที่เคยมี) และ
256x256 "รูปภาพที่แสดง" ที่เก็บไว้ในคลังรูปภาพไฟล์ใหม่ (ขนาดที่แน่นอนที่
ที่ระบบเลือกอาจแตกต่างกันไปในอนาคต) คุณสามารถเพิ่มรูปภาพขนาดใหญ่ลงในรายชื่อติดต่อได้โดยการใส่
รูปภาพในคอลัมน์ PHOTO
ปกติของ
ซึ่งระบบจะประมวลผลเป็นภาพขนาดย่อและรูปภาพที่แสดงที่เหมาะสม
ระเบียนข้อมูล
ความคิดเห็นเกี่ยวกับการใช้งานรายชื่อติดต่อ
ContactsContract.DataUsageFeedback
API ใหม่ช่วยให้คุณติดตาม
ผู้ใช้ใช้วิธีการใดวิธีการหนึ่งในการติดต่อ เช่น ความถี่ที่ผู้ใช้ใช้
หมายเลขโทรศัพท์หรืออีเมลแต่ละรายการ ข้อมูลนี้ช่วยปรับปรุงการจัดอันดับสำหรับรายชื่อติดต่อแต่ละราย
เชื่อมโยงกับผู้ใช้แต่ละราย และให้คำแนะนำที่ดีขึ้นในการติดต่อแต่ละคน
ผู้ให้บริการปฏิทิน
API ใหม่ของปฏิทินช่วยให้คุณอ่าน เพิ่ม แก้ไข และลบปฏิทิน กิจกรรม ผู้เข้าร่วม การช่วยเตือนและการแจ้งเตือน ซึ่งจัดเก็บไว้ในผู้ให้บริการปฏิทิน
แอปและวิดเจ็ตต่างๆ สามารถใช้ API เหล่านี้เพื่ออ่านและแก้ไขกิจกรรมในปฏิทินได้ อย่างไรก็ตาม กรณีการใช้งานที่น่าสนใจที่สุดส่วนหนึ่งคืออะแดปเตอร์การซิงค์ที่ซิงค์ปฏิทินของผู้ใช้จาก บริการปฏิทินอื่นๆ กับผู้ให้บริการปฏิทิน เพื่อให้บริการตำแหน่งแบบรวมสำหรับ เหตุการณ์ของผู้ใช้ ตัวอย่างเช่น กิจกรรมใน Google ปฏิทินจะซิงค์กับผู้ให้บริการปฏิทินโดย Google Calendar Sync Adapter ทำให้สามารถดูกิจกรรมเหล่านี้ได้ในอุปกรณ์ Android แอปปฏิทิน
โมเดลข้อมูลสำหรับปฏิทินและข้อมูลเกี่ยวกับกิจกรรมในผู้ให้บริการปฏิทินคือ
กำหนดโดย CalendarContract
ข้อมูลปฏิทินของผู้ใช้ทั้งหมดจะถูกเก็บไว้ใน
จำนวนตารางที่กำหนดโดยคลาสย่อยต่างๆ ของ CalendarContract
:
- ตาราง
CalendarContract.Calendars
จะมีข้อมูลเฉพาะปฏิทิน แต่ละแถวในตารางนี้จะมีรายละเอียดสำหรับปฏิทินเดียว เช่น ชื่อ สี ข้อมูลการซิงค์ และอื่นๆ - ตาราง
CalendarContract.Events
มีข้อมูลเฉพาะเหตุการณ์ แต่ละแถวในตารางนี้มีข้อมูลสำหรับกิจกรรมเดียว เช่น ชื่อกิจกรรม สถานที่ เวลาเริ่มต้น เวลาสิ้นสุด และอื่นๆ กิจกรรมสามารถเกิดขึ้นครั้งเดียวหรือเกิดซ้ำ หลายครั้ง ระบบจะเก็บผู้เข้าร่วม การช่วยเตือน และพร็อพเพอร์ตี้เพิ่มเติมไว้ในตารางแยกต่างหากและ ใช้_ID
ของกิจกรรมเพื่อลิงก์กับกิจกรรมนั้นๆ - ตาราง
CalendarContract.Instances
มีเวลาเริ่มต้นและเวลาสิ้นสุดสำหรับ การเกิดเหตุการณ์ แต่ละแถวในตารางนี้แสดงรายการเดียว สำหรับกิจกรรมแบบครั้งเดียว มีการแมปอินสแตนซ์กับเหตุการณ์แบบหนึ่งต่อหนึ่ง สำหรับกิจกรรมที่เกิดซ้ำ แถวหลายแถวจะเป็น ที่สร้างขึ้นโดยอัตโนมัติเพื่อให้สอดคล้องกับจำนวนครั้งที่เกิดเหตุการณ์นั้นหลายครั้ง - ตาราง
CalendarContract.Attendees
รองรับผู้เข้าร่วมหรือผู้เข้าร่วมกิจกรรม แต่ละแถวแสดงผู้เข้าร่วมกิจกรรมแต่ละคน ระบุประเภทของแขก บุคคลคือคำตอบ และบุคคลนั้นรับกิจกรรม - ตาราง
CalendarContract.Reminders
จะเก็บข้อมูลการแจ้งเตือน/การแจ้งเตือน แต่ละแถวจะแสดงการแจ้งเตือนรายการเดียวสำหรับเหตุการณ์ กิจกรรมหนึ่งสามารถมีการช่วยเตือนได้หลายรายการ จำนวน การช่วยเตือนต่อกิจกรรมมีการระบุไว้ในMAX_REMINDERS
ซึ่งตั้งค่าโดยอะแดปเตอร์การซิงค์ที่ เป็นเจ้าของปฏิทินที่ระบุ การแจ้งเตือนจะระบุเป็นจำนวนนาทีก่อนที่จะถึงกิจกรรม ตั้งเวลาและระบุวิธีการปลุก เช่น เพื่อใช้การแจ้งเตือน อีเมล หรือ SMS เพื่อช่วยเตือน ผู้ใช้รายนั้น - ตาราง
CalendarContract.ExtendedProperties
มีช่องข้อมูลที่ไม่ชัดเจน ที่อะแดปเตอร์การซิงค์ใช้ ผู้ให้บริการจะไม่ดำเนินการใดๆ กับรายการในตารางนี้ ยกเว้นการลบ เมื่อลบกิจกรรมที่เกี่ยวข้องออก
หากต้องการเข้าถึงข้อมูลปฏิทินของผู้ใช้ด้วยผู้ให้บริการปฏิทิน แอปพลิเคชันของคุณต้องส่งคำขอ
สิทธิ์ READ_CALENDAR
(สำหรับสิทธิ์การอ่าน) และ
WRITE_CALENDAR
(สำหรับสิทธิ์เขียน)
ความตั้งใจของเหตุการณ์
หากต้องการแค่เพิ่มกิจกรรมลงในปฏิทินของผู้ใช้ คุณสามารถใช้ Intent ACTION_INSERT
กับข้อมูลที่กำหนดโดย Events.CONTENT_URI
เพื่อเริ่ม
กิจกรรมในแอปปฏิทินที่สร้างกิจกรรมใหม่ การใช้ Intent
และคุณสามารถระบุรายละเอียดของกิจกรรมพร้อมกับบริการเสริมต่อไปนี้
Events.TITLE
: ชื่อของ กิจกรรมCalendarContract.EXTRA_EVENT_BEGIN_TIME
: เวลาเริ่มต้นของเหตุการณ์เป็นมิลลิวินาทีจาก EpochCalendarContract.EXTRA_EVENT_END_TIME
: เหตุการณ์ เวลาสิ้นสุดเป็นมิลลิวินาทีจาก EpochEvents.EVENT_LOCATION
: สถานที่จัดกิจกรรมEvents.DESCRIPTION
: เหตุการณ์ คำอธิบายIntent.EXTRA_EMAIL
: ที่อยู่อีเมลของผู้ที่ต้องการส่งถึง เชิญEvents.RRULE
: การเกิดซ้ำ กฎสำหรับกิจกรรมEvents.ACCESS_LEVEL
: จัดว่าเป็นกิจกรรมส่วนตัวหรือสาธารณะEvents.AVAILABILITY
: ระยะเวลาของกิจกรรมนี้อนุญาตให้กำหนดกิจกรรมอื่นๆ ในเวลาเดียวกันได้หรือไม่
ผู้ให้บริการข้อความเสียง
ผู้ให้บริการข้อความเสียงใหม่จะช่วยให้แอปพลิเคชันเพิ่มข้อความเสียงไปยัง อุปกรณ์ เพื่อนำเสนอข้อความเสียงทั้งหมดของผู้ใช้ในการนำเสนอภาพเพียงครั้งเดียว ตัวอย่างเช่น ผู้ใช้อาจมีแหล่งที่มาของข้อความเสียงหลายแหล่ง เช่น หนึ่งจากผู้ให้บริการของโทรศัพท์และผู้อื่นจาก VoIP หรือเสียงอื่นๆ บริการต่างๆ แอปเหล่านี้สามารถใช้ API ของผู้ให้บริการข้อความเสียงเพื่อเพิ่มข้อความเสียงลงในอุปกรณ์ แอปพลิเคชันโทรศัพท์ในตัวก็จะนำเสนอข้อความเสียงทั้งหมดแก่ผู้ใช้ในการนำเสนอที่เป็นหนึ่งเดียว ถึงแม้ว่าแอปพลิเคชัน Phone ของระบบจะเป็นแอปพลิเคชันเดียวที่อ่านข้อความเสียงทั้งหมดได้ แต่ละแอปพลิเคชันที่มีข้อความเสียงสามารถอ่านข้อความเสียงที่เพิ่มอยู่ในระบบได้ (แต่ไม่สามารถ อ่านข้อความเสียงจากบริการอื่นๆ)
เนื่องจากในขณะนี้ API ไม่อนุญาตให้แอปของบุคคลที่สามอ่านข้อความเสียงทั้งหมดจาก ระบบ แอปของบุคคลที่สามเพียงแอปเดียวที่ควรใช้ API สำหรับข้อความเสียง คือแอปที่มีข้อความเสียง ที่จะแสดงต่อผู้ใช้
คลาส VoicemailContract
กำหนดผู้ให้บริการเนื้อหาสำหรับ
ผู้ให้บริการข้อความเสียง คลาสย่อย VoicemailContract.Voicemails
และ VoicemailContract.Status
มีตารางที่แอปดำเนินการต่อไปนี้ได้
แทรกข้อมูลข้อความเสียงเพื่อจัดเก็บในอุปกรณ์ สำหรับตัวอย่างแอปผู้ให้บริการข้อความเสียง โปรดดูที่
ผู้ให้บริการข้อความเสียง
การสาธิต
มัลติมีเดีย
Android 4.0 เพิ่ม API ใหม่หลายรายการสำหรับแอปพลิเคชันที่โต้ตอบกับสื่อ เช่น รูปภาพ วิดีโอและเพลง
เอฟเฟกต์สื่อ
เฟรมเวิร์กเอฟเฟกต์สื่อใหม่ช่วยให้คุณใช้เอฟเฟกต์ภาพที่หลากหลายกับรูปภาพและ วิดีโอ เช่น เอฟเฟกต์รูปภาพช่วยให้คุณแก้ไขตาแดง แปลงรูปภาพเป็นโทนสีเทา ปรับความสว่าง ปรับความอิ่มตัว หมุนรูปภาพ ใช้เอฟเฟ็กต์ฟิชอาย และอื่นๆ อีกมากมาย ระบบจะประมวลผลเอฟเฟกต์ทั้งหมดบน GPU เพื่อให้ได้ประสิทธิภาพสูงสุด
เพื่อประสิทธิภาพสูงสุด เอฟเฟ็กต์ต่างๆ จะถูกนำไปใช้กับพื้นผิว OpenGL โดยตรง ดังนั้นแอปพลิเคชันของคุณ ต้องมีบริบท OpenGL ที่ถูกต้องก่อนจึงจะใช้ API ของเอฟเฟกต์ได้ พื้นผิวที่คุณใช้ อาจมาจากบิตแมป วิดีโอ หรือแม้แต่กล้อง แต่มีข้อจำกัดบางอย่าง พื้นผิวต้องตรงตาม:
- โดยต้องเชื่อมโยงกับรูปภาพพื้นผิว
GL_TEXTURE_2D
- ต้องมีระดับ mipmap อย่างน้อย 1 ระดับ
ออบเจ็กต์ Effect
กำหนดเอฟเฟกต์สื่อรายการเดียวที่คุณใช้ได้
เฟรมรูปภาพ เวิร์กโฟลว์พื้นฐานในการสร้าง Effect
มีดังนี้
- เรียกใช้
EffectContext.createWithCurrentGlContext()
จากบริบท OpenGL ES 2.0 - ใช้
EffectContext
ที่ส่งกลับเพื่อเรียกใช้EffectContext.getFactory()
ซึ่งแสดงผลอินสแตนซ์ จากEffectFactory
- โทรหา
createEffect()
เพื่อส่ง ชื่อเอฟเฟกต์จาก @link android.media.effect.Effectfactor} เช่นEFFECT_FISHEYE
หรือEFFECT_VIGNETTE
คุณปรับพารามิเตอร์ของเอฟเฟกต์ได้โดยเรียกใช้ setParameter()
แล้วส่งชื่อพารามิเตอร์และค่าพารามิเตอร์ เอฟเฟ็กต์แต่ละประเภทยอมรับ
พารามิเตอร์ต่างๆ ซึ่งระบุไว้กับชื่อเอฟเฟกต์ ตัวอย่างเช่น EFFECT_FISHEYE
มี 1 พารามิเตอร์สำหรับ scale
ของ
การบิดเบี้ยวของเสียง
หากต้องการใช้เอฟเฟกต์กับพื้นผิว โปรดโทร apply()
ใน
Effect
และส่งผ่านพื้นผิวอินพุต ความกว้างและความสูง และเอาต์พุต
ของ Google พื้นผิวอินพุตต้องเชื่อมโยงกับพื้นผิว GL_TEXTURE_2D
รูปภาพ (โดยปกติจะทำโดยการเรียก glTexImage2D()
) คุณอาจระบุระดับ Mipmap หลายระดับ หากพื้นผิวเอาต์พุตยังไม่ได้เชื่อมโยงกับ
รูปภาพพื้นผิวจะถูกเชื่อมโยงโดยอัตโนมัติด้วยเอฟเฟ็กต์เป็น GL_TEXTURE_2D
และระดับ mipmap 1 ระดับ (0) ซึ่งจะมีค่าเท่ากัน
เป็นขนาดอินพุต
ระบบรองรับเอฟเฟกต์ทั้งหมดที่แสดงใน EffectFactory
อย่างไรก็ตาม อุปกรณ์บางเครื่องจะไม่รองรับเอฟเฟกต์เพิ่มเติมบางรายการจากไลบรารีภายนอก
ดังนั้น คุณต้องตรวจสอบก่อนว่าเอฟเฟ็กต์ที่ต้องการจากไลบรารีภายนอกได้รับการสนับสนุนโดยการเรียกใช้
isEffectSupported()
ไคลเอ็นต์รีโมตคอนโทรล
RemoteControlClient
ใหม่ช่วยให้มีเดียเพลเยอร์เปิดใช้การเล่นได้
ควบคุมจากไคลเอ็นต์รีโมตคอนโทรล เช่น หน้าจอล็อกของอุปกรณ์ มีเดียเพลเยอร์ยังสามารถแสดง
ข้อมูลเกี่ยวกับสื่อที่เล่นอยู่บนรีโมตคอนโทรลในขณะนี้ เช่น แทร็ก
และปกอัลบั้ม
หากต้องการเปิดใช้งานไคลเอ็นต์รีโมตคอนโทรลสำหรับมีเดียเพลเยอร์ ให้สร้างอินสแตนซ์ RemoteControlClient
ด้วยตัวสร้าง โดยส่ง PendingIntent
ที่ประกาศ ACTION_MEDIA_BUTTON
Intent ต้องประกาศคอมโพเนนต์ BroadcastReceiver
ที่ชัดแจ้งในแอปที่จัดการเหตุการณ์ ACTION_MEDIA_BUTTON
ด้วย
หากต้องการประกาศว่าอินพุตตัวควบคุมสื่อใดที่โปรแกรมเล่นของคุณจัดการได้ คุณต้องเรียกใช้ setTransportControlFlags()
บน
RemoteControlClient
ส่งผ่านชุด FLAG_KEY_MEDIA_*
Flag เช่น
FLAG_KEY_MEDIA_PREVIOUS
และ FLAG_KEY_MEDIA_NEXT
จากนั้นคุณต้องลงทะเบียน RemoteControlClient
โดยส่งต่อไปยัง MediaManager.registerRemoteControlClient()
เมื่อลงทะเบียนแล้ว Broadcast Receiver ที่คุณประกาศเมื่อสร้างอินสแตนซ์ RemoteControlClient
จะได้รับ ACTION_MEDIA_BUTTON
เหตุการณ์เมื่อกดปุ่มจากรีโมตคอนโทรล Intent ที่คุณได้รับมี KeyEvent
สำหรับคีย์สื่อที่กดอยู่ ซึ่งคุณสามารถดึงข้อมูลจาก Intent ด้วย getParcelableExtra(Intent.EXTRA_KEY_EVENT)
หากต้องการแสดงข้อมูลเกี่ยวกับสื่อที่เล่นบนรีโมตคอนโทรล ให้โทรหา editMetaData()
และเพิ่มข้อมูลเมตาไปยังกล่องที่ส่งกลับ
RemoteControlClient.MetadataEditor
คุณสามารถใส่บิตแมป
สำหรับอาร์ตเวิร์กของสื่อ
ข้อมูลตัวเลข เช่น เวลาที่ผ่านไปและข้อมูลข้อความ เช่น ชื่อแทร็ก สำหรับ
ข้อมูลเกี่ยวกับคีย์ที่ใช้ได้ โปรดดูแฟล็ก METADATA_KEY_*
ใน MediaMetadataRetriever
สำหรับตัวอย่างการใช้งาน โปรดดูที่โปรแกรมเล่นเพลงแบบสุ่ม ซึ่ง ให้ตรรกะความเข้ากันได้ที่ทำให้สามารถไคลเอ็นต์ควบคุมระยะไกลบน Android 4.0 ได้ ขณะที่อุปกรณ์ยังคงรองรับ Android 2.1 เหมือนเดิม
มีเดียเพลเยอร์
- ตอนนี้การสตรีมสื่อออนไลน์จาก
MediaPlayer
ต้องใช้สิทธิ์INTERNET
หากคุณใช้MediaPlayer
เพื่อ เล่นเนื้อหาจากอินเทอร์เน็ต อย่าลืมเพิ่มINTERNET
การขออนุญาตไฟล์ Manifest ของคุณ มิฉะนั้น การเล่นสื่อของคุณจะไม่สามารถใช้งานได้ตั้งแต่ Android 4.0 setSurface()
อนุญาตให้คุณกำหนดSurface
ให้ทำงานเป็นซิงก์วิดีโอsetDataSource()
ช่วยให้คุณทำสิ่งต่อไปนี้ได้ ส่งส่วนหัว HTTP เพิ่มเติมไปกับคำขอของคุณ ซึ่งอาจเป็นประโยชน์สำหรับสตรีมมิงแบบสดของ HTTP(S)- ตอนนี้สตรีมมิงแบบสดของ HTTP(S) ดำเนินการตามคุกกี้ HTTP ในคำขอต่างๆ แล้ว
ประเภทสื่อ
Android 4.0 เพิ่มการสนับสนุนสำหรับ
- โปรโตคอลสตรีมมิงแบบสด HTTP/HTTPS เวอร์ชัน 3
- การเข้ารหัสเสียง AAC ดิบ ADTS
- รูปภาพ WEBP
- วิดีโอ Matroska
สําหรับข้อมูลเพิ่มเติม โปรดดูที่สื่อที่รองรับ รูปแบบ
กล้อง
คลาส Camera
มี API สำหรับการตรวจจับใบหน้าและการควบคุมอยู่แล้ว
มุ่งเน้นและวัดผล
การตรวจจับใบหน้า
ตอนนี้แอปกล้องถ่ายรูปเพิ่มความสามารถได้ด้วย API การตรวจจับใบหน้าของ Android ซึ่งไม่ ตรวจจับเฉพาะใบหน้าของบุคคล แต่รวมถึงลักษณะของใบหน้าบางอย่าง เช่น ตาและปาก
หากต้องการตรวจจับใบหน้าในแอปพลิเคชันกล้อง คุณต้องลงทะเบียน Camera.FaceDetectionListener
โดยโทรหา setFaceDetectionListener()
จากนั้นคุณจะสามารถเริ่ม
พื้นผิวกล้องและเริ่มตรวจจับใบหน้าโดยโทรหา startFaceDetection()
เมื่อระบบตรวจพบใบหน้าอย่างน้อย 1 รายการในฉากของกล้อง ระบบจะเรียก Callback onFaceDetection()
ใน
การใช้ Camera.FaceDetectionListener
รวมถึงอาร์เรย์ของ
ออบเจ็กต์ Camera.Face
รายการ
อินสแตนซ์ของคลาส Camera.Face
ให้ข้อมูลที่หลากหลายเกี่ยวกับ
ใบหน้าที่ตรวจพบ ได้แก่
Rect
ที่ระบุขอบเขตของใบหน้าที่สัมพันธ์กับกล้อง ขอบเขตการมองเห็นปัจจุบัน- จำนวนเต็มระหว่าง 1 ถึง 100 ที่บ่งชี้ว่าระบบมั่นใจเพียงใดว่าออบเจ็กต์นั้น ใบหน้ามนุษย์
- รหัสที่ไม่ซ้ำกันเพื่อให้ติดตามหลายใบหน้าได้
- วัตถุ
Point
หลายรายการที่ระบุตำแหน่งของตาและปาก ทราบตำแหน่งแล้ว
หมายเหตุ: การตรวจจับใบหน้าอาจไม่รองรับในบางอุปกรณ์
ดังนั้น คุณควรตรวจสอบโดยโทรไปที่ getMaxNumDetectedFaces()
และตรวจสอบว่า
มีค่ามากกว่าศูนย์ อุปกรณ์บางรุ่นอาจไม่รองรับการระบุตาและปาก
ในกรณีนี้ ช่องเหล่านั้นในออบเจ็กต์ Camera.Face
จะเป็นค่าว่าง
จุดมุ่งเน้นและการจำกัดปริมาณ
ตอนนี้แอปกล้องสามารถควบคุมพื้นที่ที่กล้องใช้เพื่อโฟกัสและสำหรับการวัดแสงสีขาวได้
ยอดคงเหลือ
และการเปิดรับแสงอัตโนมัติ ทั้ง 2 ฟีเจอร์จะใช้คลาส Camera.Area
ใหม่เพื่อระบุ
ขอบเขตของมุมมองปัจจุบันของกล้องที่ควรโฟกัสหรือมิเตอร์ อินสแตนซ์ของคลาส Camera.Area
จะกำหนดขอบเขตของพื้นที่ด้วย Rect
และน้ำหนักของพื้นที่ ซึ่งแสดงถึงระดับความสำคัญของพื้นที่ดังกล่าว
พื้นที่ที่สัมพันธ์กับพื้นที่อื่นๆ ในการพิจารณาด้วยจำนวนเต็ม
ก่อนที่จะตั้งค่าพื้นที่โฟกัสหรือพื้นที่การวัด คุณควรเรียกใช้ getMaxNumFocusAreas()
หรือ getMaxNumMeteringAreas()
ตามลำดับก่อน หากค่าเหล่านี้แสดงผลเป็น 0 แล้ว
อุปกรณ์ไม่รองรับฟีเจอร์ที่เกี่ยวข้อง
หากต้องการระบุจุดโฟกัสหรือการตรวจสอบการใช้งาน เพียงโทรหา setFocusAreas()
หรือ setMeteringAreas()
แต่ละรายการนำออบเจ็กต์ List
จาก Camera.Area
รายการที่ระบุพื้นที่ที่ควรพิจารณา
เพื่อโฟกัสหรือตรวจสอบการใช้งาน ตัวอย่างเช่น คุณอาจใช้ฟีเจอร์ที่ช่วยให้ผู้ใช้ตั้งค่า
พื้นที่โฟกัสโดยแตะพื้นที่ของตัวอย่าง ซึ่งจะมีการแปลเป็นวัตถุ Camera.Area
และขอให้กล้องโฟกัสที่บริเวณนั้นของฉาก
โฟกัสหรือการรับแสงในบริเวณนั้นจะอัปเดตอย่างต่อเนื่องเมื่อฉากในพื้นที่เปลี่ยนแปลง
โฟกัสอัตโนมัติต่อเนื่องสำหรับรูปภาพ
คุณเปิดใช้การโฟกัสอัตโนมัติแบบต่อเนื่อง (CAF) เมื่อถ่ายภาพได้แล้ว วิธีเปิดใช้ CAF ใน
แอปกล้องถ่ายรูป ผ่าน FOCUS_MODE_CONTINUOUS_PICTURE
ไปยัง setFocusMode()
เมื่อพร้อมจับภาพ
รูปภาพ โทรหา autoFocus()
Camera.AutoFocusCallback
ของคุณจะได้รับการโทรกลับทันทีเพื่อระบุว่า
โฟกัสได้สำเร็จ หากต้องการกลับมาใช้ CAF อีกครั้งหลังจากได้รับการติดต่อกลับ คุณต้องโทรหา cancelAutoFocus()
หมายเหตุ: ระบบยังรองรับการโฟกัสอัตโนมัติต่อเนื่องขณะจับภาพด้วย
วิดีโอโดยใช้ FOCUS_MODE_CONTINUOUS_VIDEO
เพิ่มเข้ามาใน API ระดับ 9
ฟีเจอร์อื่นๆ ของกล้อง
- ขณะบันทึกวิดีโอ ตอนนี้คุณสามารถโทรหา
takePicture()
เพื่อบันทึกรูปภาพโดยไม่ขัดจังหวะเซสชันวิดีโอได้แล้ว แต่ก่อนที่จะดำเนินการ คุณควร โทรหาisVideoSnapshotSupported()
เพื่อตรวจสอบฮาร์ดแวร์ ก็รองรับ - คุณสามารถล็อกการรับแสงอัตโนมัติและไวท์บาลานซ์ด้วย
setAutoExposureLock()
และsetAutoWhiteBalanceLock()
เพื่อป้องกัน คุณสมบัติเหล่านี้ไม่ให้เปลี่ยนแปลง - ตอนนี้คุณโทรหา
setDisplayOrientation()
ระหว่างที่กล้องแสดงตัวอย่างได้แล้ว ก่อนหน้านี้ คุณสามารถเรียกใช้ ก่อนเริ่มการแสดงตัวอย่างเท่านั้น แต่ตอนนี้คุณสามารถเปลี่ยนการวางแนวได้ทุกเมื่อ
ความตั้งใจในการออกอากาศจากกล้อง
Camera.ACTION_NEW_PICTURE
: แสดงว่าผู้ใช้ได้ถ่ายภาพใหม่แล้ว แอปกล้องถ่ายรูปในตัวจะเรียกใช้สิ่งนี้ เผยแพร่หลังจากจับภาพแล้ว และแอปกล้องของบุคคลที่สามควรเผยแพร่ความตั้งใจนี้ด้วยเช่นกัน หลังจากจับภาพCamera.ACTION_NEW_VIDEO
: ซึ่งเป็นการระบุว่าผู้ใช้ได้บันทึกวิดีโอใหม่แล้ว แอปกล้องถ่ายรูปในตัวจะเรียกใช้สิ่งนี้ เผยแพร่หลังจากบันทึกวิดีโอ และแอปกล้องของบุคคลที่สามควรเผยแพร่ความตั้งใจนี้ด้วยเช่นกัน หลังจากถ่ายวิดีโอ
Android Beam (NDEF Push กับ NFC)
Androidบีมเป็นฟีเจอร์ใหม่ของ NFC ที่ช่วยให้คุณสามารถส่งข้อความ NDEF จากอุปกรณ์เครื่องหนึ่งไปยัง อีกแบบหนึ่ง (กระบวนการหรือที่เรียกว่า "NDEF Push") การโอนข้อมูลจะเริ่มต้นเมื่อ อุปกรณ์ที่ใช้ Android ที่สนับสนุน Androidบีมอยู่ในระยะใกล้ (ประมาณ 4 ซม.) โดยปกติแล้วจะมี หลังของพวกเขา ข้อมูลภายในข้อความ NDEF อาจมีข้อมูลใดก็ตามที่คุณต้องการแชร์ ระหว่างอุปกรณ์ได้ด้วย ตัวอย่างเช่น แอป People จะแชร์รายชื่อติดต่อ, YouTube แชร์วิดีโอ และเบราว์เซอร์ แชร์ URL โดยใช้ Androidบีม
หากต้องการส่งข้อมูลระหว่างอุปกรณ์โดยใช้ Android Beam คุณต้องสร้าง NdefMessage
ซึ่งมีข้อมูลที่ต้องการแชร์ขณะที่มีกิจกรรมอยู่
เบื้องหน้า จากนั้นคุณต้องส่ง NdefMessage
ไปยังระบบโดยใช้ 1 ใน 2
ด้วยวิธีต่อไปนี้
- กําหนด
NdefMessage
รายการเดียวที่จะพุชขณะอยู่ในกิจกรรม:โทรติดต่อ
setNdefPushMessage()
ได้ทุกเมื่อเพื่อตั้งค่า ข้อความที่คุณต้องการส่ง ตัวอย่างเช่น คุณอาจเรียกใช้เมธอดนี้และส่งต่อNdefMessage
ให้คุณระหว่างกิจกรรมonCreate()
จากนั้น เมื่อใดก็ตามที่มีการเปิดใช้งาน Android Beam ด้วยอุปกรณ์อื่นขณะที่กิจกรรมอยู่ใน ในเบื้องหน้า ระบบจะส่งNdefMessage
ไปยังอุปกรณ์อื่น - กําหนด
NdefMessage
ที่จะพุช ณ เวลาที่เริ่ม Androidบีม ดังนี้ใช้งาน
NfcAdapter.CreateNdefMessageCallback
โดยที่คุณ การนำcreateNdefMessage()
จะแสดงผลNdefMessage
ที่คุณต้องการส่ง จากนั้นส่งการติดตั้งใช้งานNfcAdapter.CreateNdefMessageCallback
ไปยังsetNdefPushMessageCallback()
ในกรณีนี้ เมื่อมีการเปิดใช้งาน Android Beam ด้วยอุปกรณ์อีกเครื่องหนึ่งในขณะที่กิจกรรมอยู่ใน เบื้องหน้า ระบบจะเรียก
createNdefMessage()
เพื่อดึงข้อมูลNdefMessage
ที่ต้องการส่ง ซึ่งจะช่วยให้คุณกําหนดNdefMessage
ให้นําส่งเมื่อมีการเริ่ม Android Beam เท่านั้นในกรณีที่เนื้อหา ของข้อความอาจแตกต่างกันไปตลอดระยะเวลาของกิจกรรม
ในกรณีที่คุณต้องการเรียกใช้โค้ดเฉพาะบางอย่างเมื่อระบบส่ง NDEF ให้คุณเรียบร้อยแล้ว
ไปยังอุปกรณ์อีกเครื่อง คุณสามารถใช้ NfcAdapter.OnNdefPushCompleteCallback
และตั้งค่าเป็น setNdefPushCompleteCallback()
ระบบจะ
จากนั้นให้โทรหา onNdefPushComplete()
เมื่อมีการส่งข้อความ
ในอุปกรณ์รับ ระบบจะส่งข้อความ NDEF Push ในลักษณะเดียวกับ NFC ทั่วไป
แท็กทั้งหมด. ระบบเรียกใช้ Intent ด้วย ACTION_NDEF_DISCOVERED
การดำเนินการเพื่อเริ่มกิจกรรม โดยใช้ URL หรือตั้งค่าประเภท MIME ตาม NdefRecord
แรกใน NdefMessage
สำหรับกิจกรรมที่คุณต้องการ
คุณสามารถประกาศตัวกรอง Intent สำหรับ URL หรือประเภท MIME ที่แอปของคุณสนใจได้ สำหรับข้อมูลเพิ่มเติม
ข้อมูลเกี่ยวกับการส่งแท็ก โปรดดูคู่มือนักพัฒนาซอฟต์แวร์ NFC
หากต้องการให้ NdefMessage
มี URI คุณก็สามารถใช้
Method createUri
เพื่อสร้าง NdefRecord
ใหม่ตามสตริงหรือออบเจ็กต์ Uri
หาก URI คือ
รูปแบบพิเศษที่คุณต้องการให้แอปพลิเคชันของคุณได้รับในระหว่างกิจกรรม Android Beam ด้วย คุณสามารถ
ควรสร้างตัวกรอง Intent สำหรับกิจกรรมโดยใช้รูปแบบ URI เดียวกันเพื่อรับ
ข้อความ NDEF ขาเข้า
คุณควรส่ง "บันทึกแอปพลิเคชัน Android" ด้วย ด้วย NdefMessage
ของคุณใน
เพื่อรับประกันว่าแอปพลิเคชันของคุณจะจัดการกับข้อความ NDEF ที่เข้ามาใหม่
แอปพลิเคชันจะกรองสำหรับการดำเนินการ Intent เดียวกัน คุณสามารถสร้างบันทึกแอปพลิเคชัน Android ได้โดย
กำลังโทรหา createApplicationRecord()
ผ่าน
ชื่อแพ็กเกจของแอปพลิเคชัน เมื่ออุปกรณ์อีกเครื่องได้รับข้อความ NDEF ที่มีหมายเลข
บันทึกแอปพลิเคชันและแอปพลิเคชันหลายรายการมีกิจกรรมที่จัดการ Intent ที่ระบุ
ระบบจะส่งข้อความไปยังกิจกรรมในแอปพลิเคชันของคุณเสมอ (ตามการจับคู่
ระเบียนแอปพลิเคชัน) หากอุปกรณ์เป้าหมายยังไม่ได้ติดตั้งแอปพลิเคชันของคุณ พารามิเตอร์
ระบบใช้บันทึกแอปพลิเคชัน Android เพื่อเปิด Google Play และพาผู้ใช้ไปที่
แอปพลิเคชันเพื่อติดตั้ง
หากแอปพลิเคชันของคุณไม่ได้ใช้ NFC API ในการรับส่งข้อความพุชแบบ NDEF ระบบของ Android จะจัดเตรียม ลักษณะการทำงานเริ่มต้น: เมื่อแอปพลิเคชันของคุณทำงานอยู่เบื้องหน้าบนอุปกรณ์หนึ่งและ Android Beam เรียกใช้ด้วยอุปกรณ์ที่ใช้ Android อีกเครื่องหนึ่ง จากนั้นอุปกรณ์อีกเครื่องจะได้รับข้อความ NDEF ที่มีการเรียก บันทึกแอปพลิเคชัน Android ที่ระบุแอปพลิเคชันของคุณ หากอุปกรณ์ที่รับมีสัญญาณ ติดตั้งแอปพลิเคชันแล้ว ระบบจะเปิดใช้งาน หากไม่ได้ติดตั้งไว้ Google Play จะเปิดขึ้นและ ผู้ใช้ไปยังแอปพลิเคชันของคุณเพื่อทำการติดตั้ง
คุณสามารถอ่านเพิ่มเติมเกี่ยวกับ Android Beam และคุณลักษณะอื่นๆ ของ NFC ได้ในคู่มือนักพัฒนาข้อมูลพื้นฐานของ NFC สำหรับโค้ดตัวอย่าง โดยใช้ Android Beam โปรดดูแท็บ การสาธิตบีม
Wi-Fi P2P
ขณะนี้ Android สนับสนุนการเชื่อมต่อ Wi-Fi แบบเพียร์ทูเพียร์ (P2P) ระหว่างอุปกรณ์ที่ใช้ Android และ อุปกรณ์ประเภทอื่น (เป็นไปตาม Wi-Fi DirectTM ของ Wi-Fi Alliance ของ Wi-Fi Alliance โปรแกรมการรับรอง) โดยไม่ต้องมีฮอตสปอตหรือการเชื่อมต่ออินเทอร์เน็ต เฟรมเวิร์ก Android มอบ ชุด API ของ Wi-Fi P2P ที่ให้คุณค้นพบและเชื่อมต่อกับอุปกรณ์อื่นๆ เมื่ออุปกรณ์แต่ละเครื่อง สนับสนุน Wi-Fi P2P จากนั้นจะสื่อสารผ่านการเชื่อมต่อที่รวดเร็วในระยะทางที่นานกว่า การเชื่อมต่อบลูทูธ
แพ็กเกจใหม่ android.net.wifi.p2p
มี API ทั้งหมดสำหรับการทำงานแบบเพียร์ทูเพียร์
เชื่อมต่อกับ Wi-Fi ชั้นเรียนหลักที่คุณจะต้องดำเนินการด้วยคือ WifiP2pManager
ซึ่งคุณจะได้รับเมื่อโทรติดต่อ getSystemService(WIFI_P2P_SERVICE)
WifiP2pManager
มี API ที่ให้คุณทำสิ่งต่อไปนี้ได้
- เริ่มต้นแอปพลิเคชันสำหรับการเชื่อมต่อแบบ P2P โดยโทรไปที่
initialize()
- ค้นหาอุปกรณ์ที่อยู่ใกล้เคียงโดยโทรหา
discoverPeers()
- เริ่มการเชื่อมต่อ P2P โดยโทรหา
connect()
- และอื่นๆ
นอกจากนี้ ยังมีอินเทอร์เฟซและคลาสอื่นๆ อีกมากมายที่จำเป็น เช่น
- อินเทอร์เฟซ
WifiP2pManager.ActionListener
ช่วยให้คุณสามารถรับ Callback เมื่อการดำเนินการ เช่น การค้นหาแอปเทียบเท่าหรือการเชื่อมต่อกับบุคคลเหล่านั้นสำเร็จหรือไม่สำเร็จ - อินเทอร์เฟซ
WifiP2pManager.PeerListListener
ช่วยให้คุณได้รับ ข้อมูลเกี่ยวกับแอปเทียบเท่าที่ค้นพบ Callback จะระบุWifiP2pDeviceList
ซึ่งคุณสามารถดึงข้อมูลออบเจ็กต์WifiP2pDevice
สำหรับอุปกรณ์แต่ละเครื่องที่อยู่ภายในช่วงและรับข้อมูล เช่น ชื่ออุปกรณ์, ที่อยู่, ประเภทอุปกรณ์, การกำหนดค่า WPS ที่อุปกรณ์รองรับ และอื่นๆ - อินเทอร์เฟซ
WifiP2pManager.GroupInfoListener
ช่วยให้คุณทำสิ่งต่อไปนี้ได้ ได้รับข้อมูลเกี่ยวกับกลุ่ม P2P Callback จะระบุออบเจ็กต์WifiP2pGroup
ซึ่งให้ข้อมูลกลุ่ม เช่น เจ้าของ, ชื่อเครือข่าย และรหัสผ่าน - อินเทอร์เฟซ
WifiP2pManager.ConnectionInfoListener
ช่วยให้คุณทำสิ่งต่อไปนี้ได้ จะได้รับข้อมูลเกี่ยวกับการเชื่อมต่อปัจจุบัน Callback จะระบุออบเจ็กต์WifiP2pInfo
ซึ่งมีข้อมูล เช่น มีการระบุว่ากลุ่มมีการ และใครคือเจ้าของกลุ่ม
หากต้องการใช้ Wi-Fi P2P API แอปของคุณต้องขอสิทธิ์จากผู้ใช้ดังต่อไปนี้
ACCESS_WIFI_STATE
CHANGE_WIFI_STATE
INTERNET
(แม้ว่าในทางเทคนิคแล้วแอปของคุณจะไม่เชื่อมต่อ ไปยังอินเทอร์เน็ต การสื่อสารกับแอปเทียบเท่า P2P แบบ Wi-Fi กับซ็อกเก็ต Java มาตรฐานต้องใช้อินเทอร์เน็ต สิทธิ์)
ระบบ Android ยังเผยแพร่การทำงานต่างๆ หลายอย่างระหว่างกิจกรรม Wi-Fi P2P บางกิจกรรม ดังนี้
WIFI_P2P_CONNECTION_CHANGED_ACTION
: P2P เปลี่ยนสถานะการเชื่อมต่อแล้ว รายการนี้ถือEXTRA_WIFI_P2P_INFO
พร้อมออบเจ็กต์WifiP2pInfo
และEXTRA_NETWORK_INFO
ที่มีNetworkInfo
ออบเจ็กต์WIFI_P2P_STATE_CHANGED_ACTION
: สถานะ P2P มี เปลี่ยนระหว่างเปิดใช้กับปิดใช้ ผู้ให้บริการEXTRA_WIFI_STATE
ที่มีWIFI_P2P_STATE_DISABLED
หรือWIFI_P2P_STATE_ENABLED
WIFI_P2P_PEERS_CHANGED_ACTION
: รายชื่อแอปเทียบเท่า มีการเปลี่ยนแปลงWIFI_P2P_THIS_DEVICE_CHANGED_ACTION
: รายละเอียดของ อุปกรณ์นี้มีการเปลี่ยนแปลง
ดูข้อมูลเพิ่มเติมในเอกสารประกอบ WifiP2pManager
และ
ดูที่
การสาธิต Wi-Fi P2P
แอปพลิเคชันตัวอย่าง
อุปกรณ์สุขภาพบลูทูธ
ขณะนี้ Android สนับสนุนอุปกรณ์โปรไฟล์สุขภาพบลูทูธแล้ว คุณจึงสามารถสร้างแอปพลิเคชันที่ใช้ บลูทูธเพื่อสื่อสารกับอุปกรณ์สุขภาพที่รองรับบลูทูธ เช่น ตัววัดอัตราการเต้นของหัวใจ เครื่องวัดเลือด เทอร์โมมิเตอร์ และเกล็ด
เช่นเดียวกับชุดหูฟังปกติและอุปกรณ์โปรไฟล์ A2DP คุณจะต้องเรียกใช้ getProfileProxy()
ด้วย BluetoothProfile.ServiceListener
และประเภทโปรไฟล์ HEALTH
เพื่อสร้างการเชื่อมต่อกับโปรไฟล์
ออบเจ็กต์พร็อกซี
เมื่อคุณได้รับพร็อกซีโปรไฟล์สุขภาพ (BluetoothHealth
) การเชื่อมต่อและการสื่อสารกับอุปกรณ์ด้านสุขภาพที่จับคู่ไว้จะเกี่ยวข้องกับ
คลาสของบลูทูธ
BluetoothHealthCallback
: คุณต้องขยายชั้นเรียนนี้และนำ เมธอด Callback เพื่อรับอัปเดตเกี่ยวกับการเปลี่ยนแปลงสถานะการลงทะเบียนของแอปพลิเคชันและ สถานะช่องบลูทูธBluetoothHealthAppConfiguration
: ในระหว่างการติดต่อกลับไปยังBluetoothHealthCallback
คุณจะได้รับอินสแตนซ์ของออบเจ็กต์นี้ ให้ข้อมูลการกำหนดค่าเกี่ยวกับอุปกรณ์สุขภาพบลูทูธที่พร้อมใช้งาน ซึ่งคุณต้องใช้ เพื่อดำเนินการต่างๆ เช่น เริ่มต้นและสิ้นสุดการเชื่อมต่อกับBluetoothHealth
API
โปรดดูข้อมูลเพิ่มเติมเกี่ยวกับการใช้โปรไฟล์สุขภาพของบลูทูธในเอกสารประกอบสำหรับ BluetoothHealth
การช่วยเหลือพิเศษ
Android 4.0 ปรับปรุงการเข้าถึงสำหรับผู้ใช้ที่มีความบกพร่องทางสายตาด้วยโหมดสำรวจด้วยการแตะแบบใหม่ และ API แบบขยายที่ให้คุณสามารถให้ข้อมูลเพิ่มเติมเกี่ยวกับการดูเนื้อหาหรือ พัฒนาบริการการช่วยเหลือพิเศษขั้นสูง
โหมดสำรวจด้วยการแตะ
ตอนนี้ผู้ใช้ที่สูญเสียการมองเห็นสามารถสำรวจหน้าจอได้ด้วยการแตะแล้วลากนิ้วผ่าน
เพื่อฟังเสียงบรรยายของเนื้อหา เนื่องจากโหมดสำรวจด้วยการแตะจะทำงานร่วมกัน
เคอร์เซอร์เสมือนจริงช่วยให้โปรแกรมอ่านหน้าจอสามารถระบุข้อความอธิบายได้ในลักษณะเดียวกับหน้าจอ
ที่อ่านได้เมื่อผู้ใช้ไปยังส่วนต่างๆ ด้วย D-pad หรือแทร็กบอล โดยการอ่านข้อมูลที่มีให้
โดย android:contentDescription
และ setContentDescription()
จากการ "วางเมาส์" จำลอง กิจกรรม ดังนั้น
โปรดทราบว่าคุณควรระบุข้อความอธิบายสำหรับการดูใน
แอปพลิเคชัน โดยเฉพาะสำหรับ ImageButton
, EditText
ImageView
และวิดเจ็ตอื่นๆ ที่อาจไม่มีความหมายตามธรรมชาติ
ข้อความ
การช่วยเหลือพิเศษสำหรับการดู
หากต้องการปรับปรุงข้อมูลที่พร้อมใช้งานสำหรับบริการการช่วยเหลือพิเศษ เช่น โปรแกรมอ่านหน้าจอ ให้ทำดังนี้
ใช้เมธอด Callback ใหม่สำหรับเหตุการณ์การช่วยเหลือพิเศษในคอมโพเนนต์ View
ที่กำหนดเอง
โปรดทราบว่าก่อนอื่นลักษณะการทำงานของเมธอด sendAccessibilityEvent()
ใน Android มีการเปลี่ยนแปลง
4.0 เมื่อผู้ใช้เปิดใช้บริการการช่วยเหลือพิเศษในอุปกรณ์ เช่นเดียวกับ Android เวอร์ชันก่อนหน้า
และเกิดเหตุการณ์อินพุต เช่น การคลิกหรือการวางเมาส์ การแสดงผลที่เกี่ยวข้องจะได้รับการแจ้งเตือนด้วยการเรียก
sendAccessibilityEvent()
ก่อนหน้านี้
การใช้งาน sendAccessibilityEvent()
จะ
เริ่มต้น AccessibilityEvent
และส่งไปยัง AccessibilityManager
ลักษณะการทํางานแบบใหม่นี้ต้องมี Callback เพิ่มเติม
เมธอดที่อนุญาตให้มุมมองและระดับบนสุดของมุมมองเพิ่มข้อมูลตามบริบทลงในเหตุการณ์ได้
- เมื่อเรียกใช้เมธอด
sendAccessibilityEvent()
และsendAccessibilityEventUnchecked()
จะเลื่อนเวลา ไปยังonInitializeAccessibilityEvent()
การติดตั้งใช้งานที่กําหนดเองของ
View
อาจต้องการใช้งานonInitializeAccessibilityEvent()
เพื่อ โปรดแนบข้อมูลการช่วยเหลือพิเศษเพิ่มเติมกับAccessibilityEvent
แต่ก็ควรเรียกใช้การติดตั้งใช้งานขั้นสูงด้วย ระบุข้อมูลเริ่มต้น เช่น คำอธิบายเนื้อหามาตรฐาน ดัชนีสินค้า และอื่นๆ อย่างไรก็ตาม คุณไม่ควรเพิ่มเนื้อหาแบบข้อความเพิ่มเติมใน Callback นี้ ซึ่งอาจเกิดขึ้นได้ ถัดไป - เมื่อเริ่มตั้งค่าแล้ว หากเหตุการณ์เป็นหนึ่งในหลายๆ ประเภทที่ควรใส่ข้อความ
มุมมองจะได้รับการติดต่อไปยัง
dispatchPopulateAccessibilityEvent()
ซึ่ง เลื่อนไปที่onPopulateAccessibilityEvent()
Callbackโดยปกติแล้วการติดตั้งใช้งาน
View
ที่กำหนดเองควรใช้onPopulateAccessibilityEvent()
เพื่อเพิ่ม เนื้อหาข้อความไปยังAccessibilityEvent
หากไม่มีข้อความandroid:contentDescription
หรือ ไม่เพียงพอ วิธีเพิ่มข้อความอธิบายในส่วนAccessibilityEvent
โทรgetText()
add()
- ในจุดนี้
View
จะผ่านเหตุการณ์ขึ้นตามลำดับชั้นการแสดงผลด้วยการเรียกใช้requestSendAccessibilityEvent()
ใน มุมมองหลัก มุมมองของผู้ปกครองแต่ละอันจะมีโอกาสเสริมข้อมูลการช่วยเหลือพิเศษด้วยวิธีต่อไปนี้ กำลังเพิ่มAccessibilityRecord
จนกว่าจะ ท้ายที่สุดแล้วจะไปถึงมุมมองรูท ซึ่งจะส่งเหตุการณ์ไปยังAccessibilityManager
ด้วยsendAccessibilityEvent()
นอกเหนือจากวิธีการใหม่ข้างต้น ซึ่งมีประโยชน์ในการขยายคลาส View
คุณยังสามารถสกัดกั้นการเรียกกลับของเหตุการณ์เหล่านี้ใน View
ใดก็ได้ โดยขยาย AccessibilityDelegate
และตั้งค่าในมุมมองด้วย
setAccessibilityDelegate()
เมื่อดำเนินการแล้ว เมธอดการเข้าถึงแต่ละวิธีในมุมมองจะเลื่อนการเรียกไปยังเมธอดที่เกี่ยวข้องใน
ผู้ได้รับมอบสิทธิ์ ตัวอย่างเช่น เมื่อมุมมองได้รับการเรียกใช้ onPopulateAccessibilityEvent()
มุมมองจะส่งผ่านไปยัง
วิธีเดียวกันใน View.AccessibilityDelegate
วิธีการใดๆ ที่ไม่ได้จัดการโดย
ผู้รับมอบสิทธิ์จะกลับมาที่มุมมองสำหรับการดำเนินการเริ่มต้น ซึ่งจะอนุญาตให้คุณลบล้าง
เมธอดที่จำเป็นสำหรับการแสดงผลใดๆ โดยไม่ต้องขยายคลาส View
หากคุณต้องการรักษาความเข้ากันได้กับ Android เวอร์ชันก่อน 4.0 และรองรับ API การเข้าถึงได้ง่ายใหม่ คุณสามารถทำได้ด้วยการสนับสนุน v4 เวอร์ชันล่าสุด ไลบรารี (ในแพ็กเกจความเข้ากันได้, r4) โดยใช้ชุดคลาสยูทิลิตีที่มี API การช่วยเหลือพิเศษใหม่ในลักษณะการทำงานที่เข้ากันได้แบบย้อนหลัง การออกแบบอีกด้วย
บริการการช่วยเหลือพิเศษ
หากคุณกำลังพัฒนาบริการการช่วยเหลือพิเศษ ข้อมูลเกี่ยวกับเหตุการณ์การช่วยเหลือพิเศษต่างๆ ได้รับการขยายการใช้งานไปอย่างมากเพื่อให้สามารถใช้ข้อเสนอแนะเกี่ยวกับความสามารถเข้าถึงได้ง่ายขั้นสูงมากขึ้นสำหรับผู้ใช้ ใน กล่าวคือ เหตุการณ์จะสร้างขึ้นจากองค์ประกอบของการดู ซึ่งทำให้ได้ข้อมูลบริบทและ การอนุญาตให้บริการการเข้าถึงสามารถข้ามมุมมองต้นไม้ เพื่อรับข้อมูลเพิ่มเติม และ ต้องจัดการกับกรณีพิเศษต่างๆ
หากคุณกำลังพัฒนาบริการการช่วยเหลือพิเศษ (เช่น โปรแกรมอ่านหน้าจอ) คุณจะเข้าถึง ข้อมูลเพิ่มเติมเนื้อหาและลำดับชั้นของมุมมองการข้ามผ่านโดยใช้ขั้นตอนต่อไปนี้
- เมื่อได้รับ
AccessibilityEvent
จากแอปพลิเคชัน เรียกAccessibilityEvent.getRecord()
เพื่อเรียกข้อมูลAccessibilityRecord
เฉพาะ (อาจมีหลายเรคคอร์ดที่แนบมากับ เหตุการณ์) - จาก
AccessibilityEvent
หรือAccessibilityRecord
แต่ละรายการ คุณสามารถเรียกใช้getSource()
เพื่อเรียกออบเจ็กต์AccessibilityNodeInfo
ได้AccessibilityNodeInfo
หมายถึงโหนดเดียว ของเนื้อหาหน้าต่างในรูปแบบที่ให้คุณค้นหาข้อมูลการช่วยเหลือพิเศษ ออบเจ็กต์AccessibilityNodeInfo
ที่แสดงผลจากAccessibilityEvent
อธิบายแหล่งที่มาของเหตุการณ์ ในขณะที่แหล่งที่มาจากAccessibilityRecord
อธิบายถึงเหตุการณ์ก่อนหน้า แหล่งที่มา - คุณสามารถใช้
AccessibilityNodeInfo
เพื่อค้นหาข้อมูล เกี่ยวกับเส้นทางนี้ โทรหาgetParent()
หรือgetChild()
เพื่อข้ามมุมมอง ลำดับชั้น หรือแม้กระทั่งเพิ่มมุมมองย่อยลงในโหนด
เพื่อให้แอปพลิเคชันของคุณเผยแพร่ตนเองไปยังระบบเป็นบริการการเข้าถึง
ต้องประกาศไฟล์การกำหนดค่า XML ที่สอดคล้องกับ AccessibilityServiceInfo
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการสร้าง
บริการเกี่ยวกับการเข้าถึง โปรดดู AccessibilityService
และ SERVICE_META_DATA
สำหรับข้อมูลเกี่ยวกับการกำหนดค่า XML
API การช่วยเหลือพิเศษอื่นๆ
หากคุณสนใจสถานะการช่วยเหลือพิเศษของอุปกรณ์ AccessibilityManager
มี API ใหม่บางส่วน เช่น
AccessibilityManager.AccessibilityStateChangeListener
เป็นอินเทอร์เฟซที่ให้คุณได้รับการติดต่อกลับเมื่อเปิดใช้งานการช่วยเหลือพิเศษ หรือ ปิดใช้อยู่getEnabledAccessibilityServiceList()
มีข้อมูลบริการการช่วยเหลือพิเศษ เปิดใช้งานอยู่ในขณะนี้isTouchExplorationEnabled()
บอก คุณได้เปิดใช้โหมดสำรวจด้วยการแตะหรือไม่
บริการเครื่องตรวจตัวสะกด
เฟรมเวิร์กโปรแกรมตรวจตัวสะกดใหม่ทำให้แอปสามารถสร้างโปรแกรมตรวจตัวสะกดในลักษณะเดียวกับ
เฟรมเวิร์กวิธีการป้อนข้อมูล (สำหรับ IME) หากต้องการสร้างโปรแกรมตรวจตัวสะกดใหม่ คุณต้องใช้บริการที่
ขยาย
SpellCheckerService
และขยายคลาส SpellCheckerService.Session
เพื่อให้คำแนะนำการสะกดคำตาม
บนข้อความที่ให้ไว้โดยเมธอด Callback ของอินเทอร์เฟซ ในเมธอด Callback SpellCheckerService.Session
คุณต้องแสดงผล
คำแนะนำการสะกดคำเป็นออบเจ็กต์ SuggestionsInfo
รายการ
แอปพลิเคชันที่ให้บริการโปรแกรมตรวจตัวสะกดต้องประกาศสิทธิ์ BIND_TEXT_SERVICE
ตามที่บริการกำหนด
บริการต้องประกาศตัวกรอง Intent ที่มี <action
android:name="android.service.textservice.SpellCheckerService" />
เป็นการดำเนินการของ Intent ด้วย และ
รวมเอลิเมนต์ <meta-data>
ที่ประกาศข้อมูลการกำหนดค่าสำหรับการสะกดคำ
เครื่องมือตรวจสอบ
ดูตัวอย่าง บริการตรวจตัวสะกดและ ตัวอย่าง แอปไคลเอ็นต์เครื่องตรวจตัวสะกดสำหรับโค้ดตัวอย่าง
เครื่องมืออ่านออกเสียงข้อความ
เราได้ขยาย API การอ่านออกเสียงข้อความ (TTS) ของ Android ไปอย่างมากเพื่อให้แอปพลิเคชัน ติดตั้งเครื่องมือ TTS ที่กำหนดเองได้ง่ายยิ่งขึ้น ในขณะที่แอปพลิเคชันที่ต้องการใช้เครื่องมือ TTS จะมี API ใหม่ 2 รายการสำหรับการเลือกเครื่องมือ
การใช้เครื่องมืออ่านออกเสียงข้อความ
ใน Android เวอร์ชันก่อนหน้า คุณสามารถใช้คลาส TextToSpeech
ได้
เพื่อทำงานการอ่านออกเสียงข้อความ (TTS) โดยใช้เครื่องมือ TTS ที่ได้รับจากระบบหรือตั้งค่า
เครื่องมือที่กำหนดเองโดยใช้ setEngineByPackageName()
ใน Android 4.0 ใช้เมธอด setEngineByPackageName()
เลิกใช้งานแล้ว และตอนนี้คุณสามารถระบุเครื่องมือเพื่อใช้กับตัวสร้าง TextToSpeech
ใหม่ที่ยอมรับชื่อแพ็กเกจของเครื่องมือ TTS
คุณยังค้นหาเครื่องมือ TTS ที่ใช้ได้ด้วย getEngines()
ได้ด้วย เมธอดนี้จะแสดงรายการออบเจ็กต์ TextToSpeech.EngineInfo
ซึ่งรวมถึงข้อมูลเมตา เช่น
ไอคอน ป้ายกำกับ และชื่อแพ็กเกจ
การสร้างเครื่องมืออ่านออกเสียงข้อความ
ก่อนหน้านี้ เครื่องมือที่กำหนดเองกำหนดให้สร้างเครื่องมือโดยใช้ส่วนหัวเนทีฟที่ไม่ได้ระบุไว้ ใน Android 4.0 มีชุด API เฟรมเวิร์กที่สมบูรณ์สำหรับการสร้างเครื่องมือ TTS
การตั้งค่าพื้นฐานต้องใช้ TextToSpeechService
ที่
ตอบสนองต่อ Intent INTENT_ACTION_TTS_SERVICE
งานหลักสำหรับเครื่องมือ TTS เกิดขึ้นระหว่างการเรียกกลับของ onSynthesizeText()
ในบริการ
ที่ขยาย TextToSpeechService
ระบบจะส่งวิธีนี้แบบ 2
ออบเจ็กต์มีดังนี้
SynthesisRequest
: ประกอบด้วยข้อมูลที่หลากหลาย รวมถึงข้อความที่จะ สังเคราะห์ ภาษา ความเร็วในการพูด และระดับเสียงสูงต่ำSynthesisCallback
: นี่คืออินเทอร์เฟซที่เครื่องมือ TTS ของคุณ จะส่งข้อมูลเสียงพูดที่ได้ในรูปแบบเสียงสตรีมมิง ก่อนอื่น เครื่องยนต์ต้องโทรหาstart()
เพื่อระบุว่าเครื่องยนต์พร้อมส่งแล้ว เสียง แล้วโทรไปที่audioAvailable()
ส่งผ่านข้อมูลเสียงในไบต์บัฟเฟอร์ เมื่อเครื่องมือของคุณได้ส่งผ่านเสียงทั้งหมดผ่าน บัฟเฟอร์ โทรหาdone()
เนื่องจากเฟรมเวิร์กรองรับ API ที่แท้จริงสำหรับการสร้างเครื่องมือ TTS แล้ว และรองรับโค้ดแบบเนทีฟ การใช้งานได้ถูกนำออกไปแล้ว ค้นหาบล็อกโพสต์เกี่ยวกับเลเยอร์ความเข้ากันได้ ซึ่งคุณสามารถใช้เพื่อแปลงเครื่องมือ TTS เก่าให้เป็นเฟรมเวิร์กใหม่ได้
สำหรับเครื่องมือ TTS ตัวอย่างที่ใช้ API ใหม่ โปรดดูแอปตัวอย่าง Text To Speech Engine
การใช้เครือข่าย
Android 4.0 ช่วยให้ผู้ใช้เห็นได้อย่างชัดเจนว่าแอปพลิเคชันของตนใช้ข้อมูลเครือข่ายมากเพียงใด แอปการตั้งค่ามีการควบคุมที่อนุญาตให้ผู้ใช้จัดการขีดจำกัดการใช้อินเทอร์เน็ตของเครือข่าย และ แม้กระทั่งปิดใช้งานอินเทอร์เน็ตที่ใช้งานอยู่เบื้องหลังสำหรับแต่ละแอปพลิเคชัน เพื่อไม่ให้ผู้ใช้ปิดใช้งาน การเข้าถึงข้อมูลจากพื้นหลังของแอป คุณควรพัฒนากลยุทธ์เพื่อใช้ข้อมูล การเชื่อมต่ออย่างมีประสิทธิภาพ และปรับการใช้งานตามประเภทของการเชื่อมต่อที่มี
หากแอปพลิเคชันของคุณดำเนินธุรกรรมเครือข่ายเป็นจำนวนมาก คุณควรระบุการตั้งค่าของผู้ใช้ที่
ช่วยให้ผู้ใช้ควบคุมพฤติกรรมการใช้อินเทอร์เน็ตของแอปได้ เช่น ความถี่ในการซิงค์ข้อมูลของแอป เป็นต้น
ดำเนินการอัปโหลด/ดาวน์โหลดเฉพาะเมื่อใช้ Wi-Fi, เลือกว่าจะใช้ข้อมูลขณะโรมมิ่งหรือไม่ เป็นต้น
ควบคุมได้น้อย ผู้ใช้จึงมีแนวโน้มน้อยลงมากที่จะปิดการเข้าถึงข้อมูลของแอปเมื่อ
ให้เกือบถึงขีดจำกัด เนื่องจากสามารถควบคุมปริมาณอินเทอร์เน็ตที่แอปของคุณใช้ได้อย่างแม่นยำ
หากคุณระบุกิจกรรมค่ากำหนดพร้อมด้วยการตั้งค่าเหล่านี้ คุณควรรวมไว้ในไฟล์ Manifest
การประกาศตัวกรอง Intent สำหรับ ACTION_MANAGE_NETWORK_USAGE
การดำเนินการ เช่น
<activity android:name="DataPreferences" android:label="@string/title_preferences"> <intent-filter> <action android:name="android.intent.action.MANAGE_NETWORK_USAGE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
ตัวกรอง Intent นี้จะบอกให้ระบบทราบว่านี่คือกิจกรรมที่ควบคุม ปริมาณการใช้อินเทอร์เน็ตของแอปพลิเคชัน ดังนั้นเมื่อผู้ใช้ตรวจสอบปริมาณข้อมูลที่แอปใช้จาก แอปการตั้งค่า, "ดูการตั้งค่าแอปพลิเคชัน" พร้อมใช้งานที่จะเปิด กิจกรรมค่ากำหนด เพื่อให้ผู้ใช้สามารถปรับแต่งปริมาณข้อมูลที่แอปของคุณใช้
และโปรดระวังว่าขณะนี้ getBackgroundDataSetting()
เลิกใช้งานแล้วและแสดงผลเป็น "จริง" เสมอ ให้ใช้ getActiveNetworkInfo()
แทน ก่อนที่คุณจะลองเครือข่ายใดๆ
ธุรกรรม คุณควรโทรหา getActiveNetworkInfo()
เสมอ
เพื่อรับ NetworkInfo
ที่แสดงเครือข่ายปัจจุบันและค้นหา isConnected()
เพื่อตรวจสอบว่าอุปกรณ์มี
การเชื่อมต่อ จากนั้นคุณตรวจสอบคุณสมบัติการเชื่อมต่ออื่นๆ ได้ เช่น ระบุว่าอุปกรณ์
โรมมิ่งหรือเชื่อมต่อกับ Wi-Fi
องค์กร
Android 4.0 เพิ่มขีดความสามารถให้กับแอปพลิเคชันขององค์กรด้วยคุณลักษณะต่อไปนี้
บริการ VPN
VpnService
ใหม่ช่วยให้แอปพลิเคชันสร้าง VPN ของตัวเองได้
เครือข่ายส่วนตัว) ที่ทำงานในฐานะ Service
บริการ VPN สร้างอินเทอร์เฟซสำหรับ
เครือข่ายเสมือนที่มีที่อยู่และกฎการกำหนดเส้นทางเป็นของตนเอง และจะดำเนินการอ่านและเขียนทั้งหมดด้วย
ข้อบ่งชี้ไฟล์
หากต้องการสร้างบริการ VPN ให้ใช้ VpnService.Builder
ซึ่งให้คุณระบุได้
ที่อยู่เครือข่าย, เซิร์ฟเวอร์ DNS, เส้นทางเครือข่าย และอื่นๆ เมื่อดำเนินการเสร็จ คุณจะสามารถสร้าง
โดยการเรียกใช้ establish()
ซึ่งจะแสดง ParcelFileDescriptor
เนื่องจากบริการ VPN สามารถสกัดกั้นแพ็กเก็ตได้ จึงมีความเสี่ยงด้านความปลอดภัย ดังนั้นหากคุณ
ใช้ VpnService
บริการของคุณต้องกำหนดให้ BIND_VPN_SERVICE
เพื่อให้แน่ใจว่ามีเพียงระบบเท่านั้นที่จะผูกกับเครื่องมือนี้ได้ (เฉพาะระบบ
ระบบได้รับสิทธิ์นี้ แอปจะส่งคำขอไม่ได้) หากต้องการใช้บริการ VPN
ผู้ใช้ต้องเปิดใช้งานด้วยตนเองในการตั้งค่าระบบ
นโยบายด้านอุปกรณ์
แอปพลิเคชันที่จัดการการจำกัดอุปกรณ์สามารถปิดใช้กล้องโดยใช้ setCameraDisabled()
และพร็อพเพอร์ตี้ USES_POLICY_DISABLE_CAMERA
(ใช้กับองค์ประกอบ <disable-camera />
ในไฟล์การกำหนดค่านโยบาย)
การจัดการใบรับรอง
คลาส KeyChain
ใหม่มี API ที่ให้คุณนำเข้าและเข้าถึงได้
ในแหล่งเก็บคีย์ระบบ ใบรับรองจะช่วยเพิ่มความคล่องตัวในการติดตั้งไคลเอ็นต์ทั้งสอง
ใบรับรอง (เพื่อตรวจสอบข้อมูลประจำตัวของผู้ใช้) และใบรับรองของผู้ออกใบรับรอง (เพื่อ
ยืนยันข้อมูลประจำตัวของเซิร์ฟเวอร์) แอปพลิเคชัน เช่น เว็บเบราว์เซอร์หรือโปรแกรมรับส่งอีเมล สามารถเข้าถึง
เพื่อตรวจสอบสิทธิ์ผู้ใช้กับเซิร์ฟเวอร์ โปรดดูKeyChain
สำหรับข้อมูลเพิ่มเติม
เซ็นเซอร์ของอุปกรณ์
มีการเพิ่มเซ็นเซอร์ 2 ประเภทใหม่ใน Android 4.0 ดังนี้
TYPE_AMBIENT_TEMPERATURE
: เซ็นเซอร์อุณหภูมิที่ให้ อุณหภูมิแวดล้อม (ห้อง) เป็นองศาเซลเซียสTYPE_RELATIVE_HUMIDITY
: เซ็นเซอร์วัดความชื้นที่ให้ผลลัพธ์ ความชื้นสัมพัทธ์โดยรอบ (ห้อง) เป็นเปอร์เซ็นต์
หากอุปกรณ์มีทั้งเซ็นเซอร์ TYPE_AMBIENT_TEMPERATURE
และ TYPE_RELATIVE_HUMIDITY
คุณใช้เซ็นเซอร์ดังกล่าวเพื่อคำนวณจุดน้ำค้างได้
และความชื้นสัมบูรณ์
เซ็นเซอร์อุณหภูมิ TYPE_TEMPERATURE
อยู่ก่อนหน้า
เลิกใช้งานแล้ว คุณควรใช้เซ็นเซอร์ TYPE_AMBIENT_TEMPERATURE
แทน
นอกจากนี้ เซ็นเซอร์สังเคราะห์ 3 ตัวของ Android ได้รับการปรับปรุงอย่างมาก
เวลาในการตอบสนองและเอาต์พุตที่ราบรื่นยิ่งขึ้น เซ็นเซอร์เหล่านี้รวมถึงเซ็นเซอร์แรงโน้มถ่วง (TYPE_GRAVITY
), เซ็นเซอร์เวกเตอร์การหมุน (TYPE_ROTATION_VECTOR
) และเซ็นเซอร์ความเร่งเชิงเส้น (TYPE_LINEAR_ACCELERATION
) เซ็นเซอร์ที่ได้รับการปรับปรุงต้องอาศัยเครื่องวัดการหมุน
เพื่อปรับปรุงเอาต์พุต เพื่อให้เซ็นเซอร์ปรากฏเฉพาะบนอุปกรณ์ที่มีเครื่องวัดการหมุนเท่านั้น
แถบการดำเนินการ
ActionBar
ได้รับการอัปเดตเพื่อรองรับการทำงานใหม่หลายรายการ พบบ่อยที่สุด
ที่สำคัญคือ ระบบจะจัดการขนาดและการกำหนดค่าของแถบการทำงานอย่างระมัดระวังเมื่อทำงานบน
หน้าจอขนาดเล็กเพื่อมอบประสบการณ์ของผู้ใช้ที่ดีที่สุดบนหน้าจอทุกขนาด ตัวอย่างเช่น
เมื่อหน้าจอแคบ (เช่น เมื่อโทรศัพท์มือถืออยู่ในแนวตั้ง) แถบการทำงาน
แท็บการนำทางจะปรากฏใน “แถบซ้อน” ซึ่งจะปรากฏอยู่ใต้แถบการดำเนินการหลัก คุณสามารถ
ให้เลือกใช้ “แถบการทำงานแบบแยก" ซึ่งจะวางรายการการทำงานทั้งหมดไว้ในแถบแยกต่างหากที่ด้านล่าง
ของหน้าจอเมื่อหน้าจอแคบ
แถบการดำเนินการแยก
หากแถบการดำเนินการมีรายการการทำงานหลายรายการ บางรายการจะไม่พอดีกับแถบการดำเนินการใน
หน้าจอที่แคบเพื่อให้ระบบแสดงส่วนเกินไว้ในเมนูรายการเพิ่มเติม อย่างไรก็ตาม Android 4.0
ทำให้คุณสามารถเปิดใช้ “แถบการทำงานแยก" เพื่อให้รายการการทำงานปรากฏบนหน้าจอมากขึ้นใน
แยกที่ด้านล่างของหน้าจอ หากต้องการเปิดใช้แถบการทำงานการแยก ให้เพิ่ม android:uiOptions
ด้วย "splitActionBarWhenNarrow"
ลงใน
<application>
แท็ก หรือ
แท็ก <activity>
แต่ละรายการ
ในไฟล์ Manifest เมื่อเปิดใช้ ระบบจะเพิ่มแถบเพิ่มเติมที่ด้านล่างของ
หน้าจอสำหรับรายการการทำงานทั้งหมดเมื่อหน้าจอแคบ (ไม่มีรายการการทำงานปรากฏใน
แถบการดำเนินการ)
หากต้องการใช้แท็บการนำทางที่ ActionBar.Tab
API มีให้
แต่ไม่ต้องมีแถบการดำเนินการหลักที่ด้านบน (คุณต้องการให้เฉพาะแท็บปรากฏที่ด้านบน) ให้เปิดใช้งาน
แถบการดำเนินการแยกตามที่อธิบายไว้ข้างต้น และยังเรียกใช้ setDisplayShowHomeEnabled(false)
เพื่อปิดใช้
ไอคอนแอปพลิเคชันในแถบการทำงาน เมื่อไม่มีอะไรเหลืออยู่ในแถบการทำงานหลัก
จะหายไป ด้านซ้ายจะเป็นแท็บการนำทางที่ด้านบน และรายการการทำงานที่
ด้านล่างของหน้าจอ
รูปแบบแถบการดำเนินการ
หากต้องการใช้การจัดรูปแบบที่กำหนดเองกับแถบการทำงาน ให้ใช้คุณสมบัติของรูปแบบใหม่ backgroundStacked
และ backgroundSplit
เพื่อนำพื้นหลังไปใช้
แบบถอนออกได้หรือสีให้กับแถบซ้อนและแถบแยกตามลำดับ คุณยังสามารถตั้งค่ารูปแบบเหล่านี้ได้ที่
รันไทม์กับ setStackedBackgroundDrawable()
และ setSplitBackgroundDrawable()
ผู้ให้บริการการดำเนินการ
คลาส ActionProvider
ใหม่ช่วยให้คุณสร้างเครื่องจัดการเฉพาะสำหรับ
รายการการทำงาน ผู้ให้บริการการดำเนินการสามารถกำหนดมุมมองการดำเนินการ ลักษณะการทำงานของการดำเนินการเริ่มต้น และเมนูย่อย
สำหรับรายการการทำงานแต่ละรายการที่เชื่อมโยงกับรายการนั้น เมื่อคุณต้องการสร้างรายการการทำงานที่มี
ลักษณะการทำงานแบบไดนามิก (เช่น มุมมองการทำงานของตัวแปร การทำงานเริ่มต้น หรือเมนูย่อย) การขยาย ActionProvider
เป็นวิธีแก้ปัญหาที่ดีในการสร้างคอมโพเนนต์ที่นำมาใช้ใหม่ได้ แทนที่จะเป็น
การจัดการการเปลี่ยนรูปแบบรายการการทำงานต่างๆ ในส่วนหรือกิจกรรม
ตัวอย่างเช่น ShareActionProvider
เป็นส่วนขยายของ ActionProvider
ที่อำนวยความสะดวกใน "การแชร์" จากแถบการทำงาน แทนที่จะใช้
รายการการทำงานแบบเดิมที่เรียกใช้ Intent ACTION_SEND
คุณจะทำสิ่งต่อไปนี้ได้
ใช้ผู้ให้บริการการดำเนินการนี้เพื่อนำเสนอมุมมองการดำเนินการพร้อมด้วยรายการแบบเลื่อนลงของแอปพลิเคชันที่จัดการ
Intent ACTION_SEND
เมื่อผู้ใช้เลือกแอปพลิเคชันที่จะใช้
ShareActionProvider
จะจดจำการเลือกนั้นและให้
ในมุมมองการทำงานเพื่อการเข้าถึงที่รวดเร็วขึ้นในการแชร์กับแอปพลิเคชันนั้น
หากต้องการประกาศผู้ให้บริการการดำเนินการสำหรับรายการการทำงาน ให้ใส่ android:actionProviderClass
ในองค์ประกอบ <item>
สำหรับเมนูตัวเลือกของกิจกรรมที่มีชื่อคลาสของการดำเนินการ
เป็นผู้ให้บริการ เช่น
<item android:id="@+id/menu_share" android:title="Share" android:showAsAction="ifRoom" android:actionProviderClass="android.widget.ShareActionProvider" />
ในonCreateOptionsMenu()
ของกิจกรรม
เมธอด Callback ให้ดึงอินสแตนซ์ของผู้ให้บริการการดำเนินการจากรายการเมนูและตั้งค่า
ความตั้งใจ:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { menuInflater.inflate(R.menu.options, menu) val shareActionProvider = menu.findItem(R.id.menu_share)?.actionProvider as? ShareActionProvider // Set the share intent of the share action provider. shareActionProvider?.setShareIntent(createShareIntent()) ... return super.onCreateOptionsMenu(menu) }
Java
public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.options, menu); ShareActionProvider shareActionProvider = (ShareActionProvider) menu.findItem(R.id.menu_share).getActionProvider(); // Set the share intent of the share action provider. shareActionProvider.setShareIntent(createShareIntent()); ... return super.onCreateOptionsMenu(menu); }
สำหรับตัวอย่างที่ใช้ ShareActionProvider
โปรดดู ActionBarShareActionProviderActivity ใน ApiDemos
มุมมองการดำเนินการแบบยุบได้
ตอนนี้รายการการทำงานที่มีมุมมองการทำงานสามารถสลับระหว่างสถานะมุมมองการดำเนินการกับ
สถานะรายการการทำงานแบบเดิม ก่อนหน้านี้รองรับ SearchView
เท่านั้น
จะยุบเมื่อใช้เป็นมุมมองการทำงาน แต่ตอนนี้คุณสามารถเพิ่มมุมมองการทำงานสำหรับรายการการทำงาน
สลับระหว่างสถานะขยาย (มองเห็นมุมมองการดําเนินการ) กับสถานะยุบ (รายการการดําเนินการคือ
มองเห็นได้)
หากต้องการประกาศว่ารายการการทำงานที่มีมุมมองการดำเนินการยุบได้ ให้ใส่แฟล็ก “collapseActionView"
ในแอตทริบิวต์ android:showAsAction
สำหรับองค์ประกอบ <item>
ในไฟล์ XML ของเมนู
หากต้องการรับ Callback เมื่อมุมมองการดำเนินการสลับระหว่างแบบขยายและยุบ ให้ลงทะเบียน
ของ MenuItem.OnActionExpandListener
ด้วย MenuItem
ที่เกี่ยวข้องด้วยการเรียกใช้ setOnActionExpandListener()
โดยปกติแล้ว คุณควรดำเนินการในระหว่างการโทรกลับของ onCreateOptionsMenu()
หากต้องการควบคุมมุมมองการดำเนินการที่ยุบได้ คุณสามารถโทรหา collapseActionView()
และ expandActionView()
ได้ที่
MenuItem
ที่เกี่ยวข้อง
เมื่อสร้างมุมมองการดำเนินการที่กำหนดเอง คุณยังใช้อินเทอร์เฟซใหม่ของ CollapsibleActionView
เพื่อรับ Callback เมื่อมีการขยายมุมมองและ
ยุบแล้ว
API อื่นๆ สำหรับแถบการทำงาน
setHomeButtonEnabled()
อนุญาตให้คุณระบุ ไอคอน/โลโก้ทำงานเป็นปุ่มสำหรับนำทางกลับบ้านหรือ "ขึ้น" (ส่งผ่าน “true” เพื่อให้แสดงผลเป็น ปุ่ม)setIcon()
และsetLogo()
อนุญาตให้คุณกำหนดไอคอนหรือโลโก้ในแถบการทำงานในระหว่างรันไทม์Fragment.setMenuVisibility()
ช่วยให้คุณเปิดใช้ หรือปิดการมองเห็นรายการในเมนูตัวเลือกที่ประกาศโดยส่วนย่อย วิธีนี้มีประโยชน์หาก มีการเพิ่มส่วนย่อยไปยังกิจกรรมแล้ว แต่ไม่สามารถมองเห็นได้ ดังนั้นรายการเมนูจึงควร ซ่อนอยู่FragmentManager.invalidateOptionsMenu()
ช่วยให้คุณทำให้เมนูตัวเลือกกิจกรรมไม่ถูกต้องในสถานะต่างๆ ของวงจรการใช้งาน Fragment ซึ่งอาจไม่สามารถใช้เมธอดที่เทียบเท่าจากActivity
ได้
อินเทอร์เฟซผู้ใช้และการแสดงผล
Android 4.0 มีมุมมองใหม่ๆ และองค์ประกอบ UI อื่นๆ มากมาย
เลย์เอาต์แบบตารางกริด
GridLayout
คือกลุ่มมุมมองใหม่ที่วางมุมมองเด็กเป็นรูปสี่เหลี่ยมผืนผ้า
ตารางกริด GridLayout
ต่างจาก TableLayout
ตรงที่ใช้แฟลต
ลำดับชั้นและไม่ใช้ประโยชน์จากมุมมองระดับกลาง เช่น แถวของตารางเพื่อจัดทำโครงสร้าง
แต่จะระบุแถวและคอลัมน์ที่ตนควรใช้แทน (เซลล์สามารถครอบคลุมได้หลายรายการ
แถวและ/หรือคอลัมน์) และโดยค่าเริ่มต้นจะวางเรียงตามลำดับในแถวและคอลัมน์ของตารางกริด
การวางแนว GridLayout
จะกำหนดว่าองค์ประกอบย่อยตามลำดับหรือไม่
ค่าเริ่มต้นจะวางในแนวนอนหรือแนวตั้ง ระบุช่องว่างระหว่างเด็กย่อยได้โดยใช้
อินสแตนซ์ของข้อมูลพร็อพเพอร์ตี้ Space
ใหม่หรือโดยการตั้งค่าพารามิเตอร์ระยะขอบที่เกี่ยวข้อง
สำหรับเด็ก
ดู ApiDemos
สำหรับตัวอย่างที่ใช้ GridLayout
มุมมองพื้นผิว
TextureView
เป็นมุมมองใหม่ที่อนุญาตให้คุณแสดงสตรีมเนื้อหา เช่น
เป็นวิดีโอหรือฉาก OpenGL แม้ว่าจะคล้ายกับ SurfaceView
แต่ TextureView
จะมีลักษณะการทำงานเหมือนข้อมูลพร็อพเพอร์ตี้ปกติมากกว่าการสร้าง
แยกหน้าต่าง เพื่อให้คุณจัดการได้เหมือนกับออบเจ็กต์ View
อื่นๆ ตัวอย่างเช่น
คุณสามารถใช้การแปลง ทำให้เคลื่อนไหวโดยใช้ ViewPropertyAnimator
หรือ
ปรับความทึบแสงด้วย setAlpha()
โปรดระวังว่า TextureView
ทำงานภายในกรอบเวลาที่มีการเร่งฮาร์ดแวร์เท่านั้น
ดูข้อมูลเพิ่มเติมได้ในเอกสาร TextureView
เปลี่ยนวิดเจ็ต
วิดเจ็ต Switch
ใหม่เป็นแบบเปิด/ปิด 2 สถานะที่ผู้ใช้ลากไปที่ใดก็ได้
หรืออีกด้านหนึ่ง (หรือแตะ) เพื่อสลับตัวเลือกระหว่าง 2 สถานะ
คุณใช้แอตทริบิวต์ android:textOn
และ android:textOff
เพื่อระบุข้อความได้
เพื่อแสดงบนสวิตช์เมื่ออยู่ในการตั้งค่าเปิดและปิด และแอตทริบิวต์ android:text
ช่วยให้คุณติดป้ายกำกับข้างสวิตช์ได้
สำหรับตัวอย่างการใช้สวิตช์ โปรดดูไฟล์เลย์เอาต์ switches.xml และสวิตช์ที่เกี่ยวข้อง
เมนูป๊อปอัป
Android 3.0 ได้เปิดตัว PopupMenu
เพื่อสร้างเมนูบริบทสั้นๆ ที่โดดเด่น
ขึ้น ณ จุดยึดที่คุณระบุ (โดยปกติจะอยู่ในจุดของรายการที่เลือก) Android 4.0 เพิ่มเติม
PopupMenu
ที่มีฟีเจอร์ที่เป็นประโยชน์ 2-3 รายการ ได้แก่
- ตอนนี้คุณสามารถเพิ่มเนื้อหาของเมนูป๊อปอัปได้อย่างง่ายดายจากทรัพยากรเมนูแบบ XML ด้วย
inflate()
โดยการส่งรหัสทรัพยากรของเมนู - คุณยังสร้าง
PopupMenu.OnDismissListener
ที่รับ Callback เมื่อมีการปิดเมนู
ค่ากำหนด
Abstract Class ใหม่ที่มีชื่อว่า TwoStatePreference
เป็นพื้นฐานสำหรับ
การตั้งค่าที่มีตัวเลือกแบบ 2 สถานะ SwitchPreference
ใหม่เป็นส่วนขยายของ TwoStatePreference
ที่มีวิดเจ็ต Switch
ใน
มุมมองค่ากำหนดเพื่อให้ผู้ใช้สลับการตั้งค่าเป็นเปิดหรือปิด โดยไม่ต้องเปิดการตั้งค่าเพิ่มเติม
หน้าจอหรือกล่องโต้ตอบค่ากำหนด ตัวอย่างเช่น แอปพลิเคชันการตั้งค่าจะใช้ SwitchPreference
สำหรับการตั้งค่า Wi-Fi และบลูทูธ
ธีมของระบบ
ธีมเริ่มต้นสำหรับแอปพลิเคชันทั้งหมดที่กำหนดเป้าหมายเป็น Android 4.0 (โดยการตั้งค่า targetSdkVersion
หรือ
minSdkVersion
ถึง
“14"
ขึ้นไป) เปลี่ยนเป็น
"ค่าเริ่มต้นของอุปกรณ์" ธีม: Theme.DeviceDefault
นี่อาจเป็น
ธีม Holo สีเข้มหรือธีมสีเข้มแบบอื่นๆ ที่กำหนดไว้โดยอุปกรณ์ที่เจาะจง
กลุ่มธีมทั้ง Theme.Holo
รายการไม่มีการเปลี่ยนแปลงอย่างแน่นอน
จากอุปกรณ์เครื่องหนึ่งไปยังอีกเครื่องหนึ่งได้เมื่อใช้ Android เวอร์ชันเดียวกัน หากคุณเจาะจง
คุณสามารถใช้ธีม Theme.Holo
ธีมใดก็ได้กับกิจกรรม คุณสามารถ
โปรดวางใจว่าธีมเหล่านี้จะไม่เปลี่ยนแปลงลักษณะนิสัยบนอุปกรณ์ต่างๆ ที่อยู่ภายใน
เวอร์ชันแพลตฟอร์ม
คุณต้องการให้แอปกลมกลืนกับธีมโดยรวมของอุปกรณ์ (เช่น เมื่อมี OEM ต่างๆ
ระบุธีมเริ่มต้นที่แตกต่างกันสำหรับระบบ) คุณควรใช้ธีมจากกลุ่ม Theme.DeviceDefault
อย่างชัดเจน
ปุ่มเมนูตัวเลือก
เริ่มตั้งแต่ Android 4.0 เป็นต้นไป คุณจะสังเกตเห็นว่าโทรศัพท์มือถือไม่จำเป็นต้องใช้ปุ่มฮาร์ดแวร์เมนูอีกต่อไป อย่างไรก็ตาม คุณไม่ต้องกังวลเกี่ยวกับเรื่องนี้หากแอปพลิเคชันที่มีอยู่ของคุณมีเมนูตัวเลือกและคาดว่าจะมี ปุ่มเมนู เพื่อให้มั่นใจว่าแอปที่มีอยู่จะทำงานได้ตามที่คาดหวัง ระบบจะจัดเตรียม ปุ่มเมนูบนหน้าจอสำหรับแอปที่ออกแบบมาสำหรับ Android เวอร์ชันเก่า
เพื่อให้ผู้ใช้ได้รับประสบการณ์ที่ดีที่สุด แอปใหม่และแอปที่อัปเดตควรใช้ ActionBar
แทน เพื่อให้สิทธิ์เข้าถึงรายการในเมนู และตั้งค่า targetSdkVersion
เป็น
"14"
เพื่อใช้ประโยชน์จากลักษณะการทำงานเริ่มต้นล่าสุดของเฟรมเวิร์ก
การควบคุมสำหรับการแสดง UI ของระบบ
นับตั้งแต่ช่วงแรกๆ ของ Android ระบบได้จัดการคอมโพเนนต์ UI ที่เรียกว่าสถานะ ซึ่งอยู่ที่ด้านบนของอุปกรณ์โทรศัพท์มือถือเพื่อส่งข้อมูล เช่น ผู้ให้บริการ สัญญาณ เวลา การแจ้งเตือน และอื่นๆ Android 3.0 ได้เพิ่มแถบระบบสำหรับแท็บเล็ต อุปกรณ์ ซึ่งจะอยู่ที่ด้านล่างของหน้าจอเพื่อให้ตัวควบคุมการนำทางของระบบ (หน้าแรก กลับมาเป็นต้น) รวมถึงอินเทอร์เฟซสำหรับองค์ประกอบต่างๆ ที่แถบสถานะมีให้ ใน Android 4.0 ระบบจะมี UI ระบบประเภทใหม่ที่เรียกว่าแถบนำทาง คุณ คุณอาจพิจารณาให้แถบนำทางเป็นแถบระบบที่ปรับแต่งมาสำหรับ โทรศัพท์มือถือ ซึ่งใช้เป็นตัวควบคุมการนำทาง สำหรับอุปกรณ์ที่ไม่มีฮาร์ดแวร์ที่ใช้ร่วมกับระบบ แต่ไม่ได้มีส่วน UI การแจ้งเตือนและการควบคุมการตั้งค่าในแถบระบบ ดังนั้น อุปกรณ์ที่ช่วยนำทาง และมีแถบสถานะที่ด้านบน
ปัจจุบันคุณซ่อนแถบสถานะในโทรศัพท์โดยใช้ธงชาติ FLAG_FULLSCREEN
ได้ ใน Android 4.0 API ที่ควบคุม
การเปิดเผยของแถบระบบได้รับการอัปเดตเพื่อแสดงลักษณะการทำงานของทั้งแถบระบบได้ดียิ่งขึ้น
และแถบนำทาง
- แฟล็ก
SYSTEM_UI_FLAG_LOW_PROFILE
จะแทนที่แฟล็กSTATUS_BAR_HIDDEN
เมื่อตั้งค่าสถานะนี้ การตั้งค่าสถานะจะเปิดใช้ "โปรไฟล์ต่ำ" สำหรับแถบระบบหรือ แถบนำทาง นอกจากนี้ ยังซ่อนปุ่มนำทางและองค์ประกอบอื่นๆ ในแถบระบบด้วย กำลังเปิดใช้ วิธีนี้จะมีประโยชน์ในการสร้างเกมที่สมจริงยิ่งขึ้นโดยไม่รบกวนการนำทางของระบบ - ธง
SYSTEM_UI_FLAG_VISIBLE
แทนที่แฟล็กSTATUS_BAR_VISIBLE
เพื่อขอให้แสดงแถบระบบหรือแถบนำทาง SYSTEM_UI_FLAG_HIDE_NAVIGATION
เป็นแฟล็กใหม่ที่ขอ จะซ่อนแถบนำทางไว้ทั้งหมด โปรดทราบว่าวิธีนี้ใช้ได้เฉพาะกับแถบนำทางเท่านั้น ที่ใช้โดยโทรศัพท์มือถือบางรุ่น (จะไม่ซ่อนแถบระบบบนแท็บเล็ต) การนำทาง จะกลับไปดูทันทีที่ระบบได้รับข้อมูลจากผู้ใช้ ด้วยเหตุนี้ โหมดนี้จึงมีประโยชน์ สำหรับการเล่นวิดีโอเป็นหลัก หรือกรณีอื่นๆ ที่จำเป็นต้องใช้ทั้งหน้าจอ แต่ข้อมูลจากผู้ใช้นั้น ไม่จำเป็น
คุณตั้งค่าแฟล็กเหล่านี้แต่ละรายการสำหรับแถบระบบและแถบนำทางได้โดยเรียกใช้ setSystemUiVisibility()
บนมุมมองใดก็ได้ในกิจกรรม
ตัวจัดการหน้าต่างรวม (หรือประกอบกัน) แฟล็กทั้งหมดจากมุมมองทั้งหมดในหน้าต่างและ
นำไปใช้กับ UI ของระบบตราบใดที่หน้าต่างยังโฟกัสการป้อนข้อมูลอยู่ เมื่อหน้าต่างของคุณสูญเสียอินพุต
(ผู้ใช้ออกจากแอปของคุณ หรือมีกล่องโต้ตอบปรากฏขึ้น) การแจ้งว่าไม่เหมาะสมของคุณจะไม่มีผลอีกต่อไป
ในทํานองเดียวกัน หากคุณนํามุมมองเหล่านั้นออกจากลําดับชั้นการดู แฟล็กดังกล่าวจะไม่มีผลอีกต่อไป
ซิงค์ข้อมูลเหตุการณ์อื่นๆ ในกิจกรรมกับการเปลี่ยนแปลงระดับการเข้าถึงใน UI ของระบบ (สำหรับ
เช่น ซ่อนแถบการทำงานหรือการควบคุม UI อื่นๆ เมื่อซ่อน UI ของระบบ) คุณควรลงทะเบียน
View.OnSystemUiVisibilityChangeListener
ที่จะได้รับการแจ้งเตือนเมื่อระดับการเข้าถึง
ของการเปลี่ยนแปลงแถบระบบหรือแถบนำทาง
โปรดดู OverscanActivity สำหรับการสาธิตตัวเลือก UI ต่างๆ ของระบบ
เฟรมเวิร์กอินพุต
Android 4.0 เพิ่มการสนับสนุนเหตุการณ์การเลื่อนเคอร์เซอร์และเหตุการณ์ใหม่สำหรับสไตลัสและปุ่มเมาส์
เหตุการณ์เมื่อวางเมาส์
คลาส View
รองรับ “วางเมาส์” แล้ว เหตุการณ์เพื่อให้เกิดการโต้ตอบที่สมบูรณ์ยิ่งขึ้น
ผ่านการใช้อุปกรณ์ตัวชี้ (เช่น เมาส์ หรืออุปกรณ์อื่นๆ ที่ขับเคลื่อนหน้าจอ
เคอร์เซอร์)
หากต้องการรับเหตุการณ์ที่แสดงเมื่อวางเมาส์เหนือข้อมูลพร็อพเพอร์ตี้ ให้ใช้ View.OnHoverListener
และ
โปรดลงทะเบียนด้วย setOnHoverListener()
เมื่อวางเมาส์เหนือ
เกิดขึ้นขณะอยู่ในมุมมอง ผู้ฟังของคุณจะได้รับการเรียกไปยัง onHover()
โดยให้ View
ที่
ได้รับเหตุการณ์และ MotionEvent
ที่อธิบายประเภทของเหตุการณ์ที่แสดงเมื่อเลื่อนเมาส์ผ่าน
ที่เกิดขึ้น เหตุการณ์การวางเมาส์อาจเป็นอย่างใดอย่างหนึ่งต่อไปนี้
View.OnHoverListener
ควรแสดงผลเป็น "จริง" จาก onHover()
หากจัดการเหตุการณ์โฮเวอร์ หาก
Listener แสดงผลเป็น "เท็จ" จากนั้นระบบจะส่งเหตุการณ์ที่อยู่ไปยังมุมมองระดับบนสุดตามปกติ
หากแอปพลิเคชันของคุณใช้ปุ่มหรือวิดเจ็ตอื่นๆ ที่เปลี่ยนลักษณะที่ปรากฏตาม
ในตอนนี้ คุณสามารถใช้แอตทริบิวต์ android:state_hovered
ในรายการสถานะที่ถอนออกได้เพื่อ
แสดงพื้นหลังที่แตกต่างออกไปซึ่งถอนออกได้เมื่อเคอร์เซอร์เลื่อนอยู่เหนือมุมมอง
สำหรับการสาธิตเหตุการณ์โฮเวอร์ใหม่ โปรดดูคลาส Hover ใน ApiDemos
เหตุการณ์เกี่ยวกับสไตลัสและปุ่มเมาส์
ตอนนี้ Android มี API สำหรับรับอินพุตจากอุปกรณ์อินพุตสไตลัส เช่น เครื่องดิจิทัล อุปกรณ์ต่อพ่วงของแท็บเล็ตหรือหน้าจอสัมผัสที่เปิดใช้สไตลัส
การป้อนข้อมูลด้วยสไตลัสทำงานในลักษณะเดียวกันกับการป้อนข้อมูลด้วยการสัมผัสหรือเมาส์ เมื่อสไตลัสสัมผัสกัน เมื่อใช้เครื่องดิจิทัล แอปพลิเคชันจะได้รับการโต้ตอบแบบเดียวกันกับเมื่อใช้นิ้วมือ แตะจอแสดงผล เมื่อสไตลัสวางอยู่เหนือเครื่องดิจิตอล แอปพลิเคชันจะมีการวางเมาส์เหนือ เหตุการณ์ปกติเหมือนตอนที่ตัวชี้เมาส์ถูกย้ายไปบนจอแสดงผลเมื่อไม่มีปุ่ม จะกด
แอปพลิเคชันของคุณสามารถแยกความแตกต่างระหว่างการป้อนข้อมูลด้วยนิ้ว เมาส์ สไตลัส และยางลบ โดยค้นหา
"ประเภทเครื่องมือ" เชื่อมโยงกับแต่ละเคอร์เซอร์ใน MotionEvent
โดยใช้ getToolType()
ประเภทเครื่องมือที่กำหนดไว้ในปัจจุบัน ได้แก่ TOOL_TYPE_UNKNOWN
, TOOL_TYPE_FINGER
TOOL_TYPE_MOUSE
TOOL_TYPE_STYLUS
และ TOOL_TYPE_ERASER
การค้นหาประเภทเครื่องมือทำให้แอปพลิเคชันของคุณ
สามารถจัดการการป้อนข้อมูลด้วยสไตลัสได้หลายวิธีจากการป้อนข้อมูลด้วยนิ้วหรือเมาส์
แอปพลิเคชันของคุณยังค้นหาได้ด้วยว่าปุ่มเมาส์หรือสไตลัสใดที่กดโดยกดปุ่ม "ปุ่ม
สถานะ" ของ MotionEvent
โดยใช้ getButtonState()
สถานะของปุ่มที่กำหนดไว้ในปัจจุบันมีดังนี้ BUTTON_PRIMARY
, BUTTON_SECONDARY
, BUTTON_TERTIARY
, BUTTON_BACK
และ BUTTON_FORWARD
เพื่อความสะดวก ปุ่มเมาส์ย้อนกลับและไปข้างหน้า
แมปกับคีย์ KEYCODE_BACK
และ KEYCODE_FORWARD
โดยอัตโนมัติ แอปพลิเคชันของคุณสามารถจัดการคีย์เหล่านี้เพื่อสนับสนุน
ปุ่มเมาส์ที่ใช้การนำทางย้อนกลับและไปข้างหน้า
นอกจากการวัดตำแหน่งและแรงกดของการสัมผัสอย่างแม่นยำแล้ว อินพุตบางอย่างของสไตลัส
อุปกรณ์ยังรายงานระยะห่างระหว่างหัวปากกาสไตลัสกับหัวปากกาสไตลัส มุมเอียงของสไตลัส
และมุมการวางแนวของสไตลัส แอปพลิเคชันของคุณสามารถค้นหาข้อมูลนี้โดยใช้ getAxisValue()
กับรหัสแกน AXIS_DISTANCE
, AXIS_TILT
และ AXIS_ORIENTATION
สำหรับการสาธิตประเภทเครื่องมือ สถานะของปุ่ม และรหัสแกนใหม่ โปรดดูที่ TouchPaint ใน ApiDemos
คุณสมบัติ
คลาส Property
ใหม่มอบวิธีที่รวดเร็ว มีประสิทธิภาพ และง่ายดายในการระบุ
ในออบเจ็กต์ใดก็ตามที่อนุญาตให้ผู้โทรสามารถตั้งค่า/รับค่าของออบเจ็กต์เป้าหมายโดยทั่วไป และ
ช่วยให้มีฟังก์ชันการทำงานในการส่งผ่านการอ้างอิงฟิลด์/เมธอด และอนุญาตให้โค้ดตั้งค่า/รับค่า
ของพร็อพเพอร์ตี้โดยไม่ทราบรายละเอียดของฟิลด์/วิธีการ
ตัวอย่างเช่น หากคุณต้องการกำหนดค่าของช่อง bar
ในวัตถุ foo
คุณต้อง
ที่เคยทำก่อนหน้านี้:
Kotlin
foo.bar = value
Java
foo.bar = value;
หากต้องการเรียกใช้ตัวตั้งค่าสำหรับช่องส่วนตัวที่แฝงอยู่ bar
คุณจะต้อง
ทำสิ่งนี้
Kotlin
foo.setBar(value)
Java
foo.setBar(value);
อย่างไรก็ตาม หากคุณต้องการส่งต่ออินสแตนซ์ foo
และกำหนดโค้ดอื่นๆ ให้
มูลค่า bar
จริงๆ แล้วไม่มีวิธีเปลี่ยนแปลงเวอร์ชันก่อน Android 4.0 เลย
เมื่อใช้ชั้นเรียน Property
คุณจะสามารถประกาศ Property
วัตถุ BAR
ในคลาส Foo
เพื่อให้คุณสามารถตั้งค่าฟิลด์ในอินสแตนซ์ foo
ของ
คลาส Foo
ดังนี้:
Kotlin
BAR.set(foo, value)
Java
BAR.set(foo, value);
ตอนนี้ชั้นเรียน View
ใช้ประโยชน์จากชั้นเรียน Property
เพื่อ
ช่วยให้คุณตั้งค่าช่องต่างๆ ได้ เช่น พร็อพเพอร์ตี้การเปลี่ยนรูปแบบที่เพิ่มลงใน Android 3.0 (ROTATION
, ROTATION_X
, TRANSLATION_X
ฯลฯ)
คลาส ObjectAnimator
ยังใช้ Property
เพื่อให้คุณสามารถสร้าง ObjectAnimator
ที่มี Property
ได้ ซึ่งจะรวดเร็ว มีประสิทธิภาพมากกว่า และเหมาะสำหรับประเภทต่ำกว่าสตริง
ของเรา
การเร่งฮาร์ดแวร์
สำหรับ Android 4.0 เป็นต้นไป การเร่งฮาร์ดแวร์สำหรับหน้าต่างทั้งหมดจะเปิดใช้โดยค่าเริ่มต้นหาก
แอปพลิเคชันได้ตั้งค่า targetSdkVersion
หรือ
minSdkVersion
ถึง
“14"
ขึ้นไป โดยทั่วไปแล้ว การเร่งฮาร์ดแวร์จะทำให้ภาพเคลื่อนไหวลื่นไหลขึ้นและลื่นไหลขึ้น
รวมทั้งการเพิ่มประสิทธิภาพโดยรวม และการตอบสนองต่อการมีปฏิสัมพันธ์ของผู้ใช้
หากจำเป็น คุณจะปิดใช้การเร่งฮาร์ดแวร์ด้วยตนเองได้โดยใช้ hardwareAccelerated
สำหรับแต่ละองค์ประกอบ <activity>
หรือ <application>
คุณยังสามารถปิดใช้การเร่งฮาร์ดแวร์สำหรับมุมมองแต่ละรายการได้โดยการโทรหา setLayerType(LAYER_TYPE_SOFTWARE)
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเร่งฮาร์ดแวร์ รวมถึงรายการภาพวาดที่ไม่รองรับ โปรดดูส่วนฮาร์ดแวร์ Acceleration
การเปลี่ยนแปลง JNI
ใน Android เวอร์ชันก่อนหน้า การอ้างอิงในพื้นที่ของ JNI ไม่ใช่แฮนเดิลโดยอ้อม ใช้ Android เคอร์เซอร์โดยตรง นี่ไม่ใช่ปัญหาตราบใดที่พนักงานเก็บขยะไม่ได้ย้ายสิ่งของ ดูเหมือนจะได้ผลเพราะ ทำให้สามารถเขียนโค้ดได้ ใน Android 4.0 ตอนนี้ระบบจะใช้ เป็นการอ้างอิงโดยอ้อมเพื่อตรวจหาข้อบกพร่องเหล่านี้
ข้อมูลโดยละเอียดของข้อมูลอ้างอิงในพื้นที่ของ JNI ได้อธิบายไว้ใน "ข้อมูลอ้างอิงในท้องถิ่นและทั่วโลก" ในเคล็ดลับของ JNI ใน Android 4.0 ระบบปรับปรุง CheckJNI ให้ตรวจจับข้อผิดพลาดเหล่านี้แล้ว ดูโพสต์ถัดไปได้ที่บล็อกของนักพัฒนาแอป Android เกี่ยวกับข้อผิดพลาดที่พบบ่อยเกี่ยวกับข้อมูลอ้างอิงของ JNI และวิธีแก้ไข
การเปลี่ยนแปลงในการใช้งาน JNI นี้จะส่งผลต่อแอปที่กำหนดเป้าหมายเป็น Android 4.0 เท่านั้น โดยการตั้งค่าอย่างใดอย่างหนึ่งต่อไปนี้
targetSdkVersion
หรือ minSdkVersion
เป็น “14"
ขึ้นไป หากคุณตั้งค่าแอตทริบิวต์เหล่านี้ให้มีค่าต่ำกว่า
การอ้างอิงในเครื่องของ JNI จะทำงานเหมือนกับเวอร์ชันก่อนหน้า
WebKit
- WebKit ได้รับการอัปเดตเป็นเวอร์ชัน 534.30 แล้ว
- รองรับแบบอักษรอินดิก (เทวนาครี เบงกาลี และทมิฬ รวมถึงการรองรับอักขระที่ซับซ้อน
จำเป็นสำหรับการรวมรูปอักขระ) ใน
WebView
และเบราว์เซอร์ในตัว - สนับสนุนแบบอักษรเอธิโอเปีย จอร์เจีย และอาร์เมเนียใน
WebView
และ เบราว์เซอร์ในตัว - การรองรับรุ่น WebDriver
ทำให้คุณสามารถทดสอบแอปที่ใช้
WebView
ได้ง่ายขึ้น
เบราว์เซอร์ Android
แอปพลิเคชันเบราว์เซอร์จะเพิ่มฟีเจอร์ต่อไปนี้เพื่อรองรับเว็บแอปพลิเคชัน
- อัปเดตคอมไพเลอร์ JavaScript V8 เพื่อการทำงานที่เร็วขึ้น
- รวมถึงการปรับปรุงสำคัญอื่นๆ ที่ยกมาจาก Android
3.0 ขณะนี้พร้อมใช้งานสำหรับโทรศัพท์มือถือ:
- การรองรับองค์ประกอบของตำแหน่งคงที่ในทุกหน้า
- การจับภาพสื่อ HTML
- การวางแนวของอุปกรณ์ กิจกรรม
- การเปลี่ยนรูปแบบ CSS 3 มิติ
สิทธิ์
สิทธิ์ใหม่มีดังต่อไปนี้
ADD_VOICEMAIL
: อนุญาตให้บริการข้อความเสียงเพิ่มข้อความเสียง ไปยังอุปกรณ์BIND_TEXT_SERVICE
: บริการที่ใช้งานSpellCheckerService
ต้องต้องการสิทธิ์นี้ด้วยตนเองBIND_VPN_SERVICE
: บริการที่ใช้งานVpnService
ต้องต้องการสิทธิ์นี้ด้วยตนเอง- android.Manifest.permission#READ_PROFILE: ให้สิทธิ์การอ่านแก่ผู้ให้บริการ
ContactsContract.Profile
- android.Manifest.permission#WRITE_PROFILE: ให้สิทธิ์การเขียนแก่ผู้ให้บริการ
ContactsContract.Profile
ฟีเจอร์ของอุปกรณ์
ฟีเจอร์ใหม่ของอุปกรณ์มีดังนี้
FEATURE_WIFI_DIRECT
: ประกาศว่าการสมัคร ใช้ Wi-Fi สำหรับการสื่อสารระหว่างเครื่อง
สำหรับมุมมองโดยละเอียดของการเปลี่ยนแปลง API ทั้งหมดใน Android 4.0 (ระดับ API) 14) ดูรายงานความแตกต่างของ API
API ก่อนหน้า
นอกเหนือจากทุกอย่างข้างต้นแล้ว Android 4.0 ยังสนับสนุน API ทั้งหมดจากรุ่นก่อนหน้า เนื่องจากแพลตฟอร์ม Android 3.x ใช้ได้เฉพาะกับอุปกรณ์ที่มีหน้าจอขนาดใหญ่ ได้รับการพัฒนาสำหรับโทรศัพท์มือถือเป็นหลัก คุณจึงอาจไม่รู้จัก API ทั้งหมดที่เพิ่มไปยัง Android ในรุ่นล่าสุด
มาดู API ที่โดดเด่นที่สุดบางส่วนที่คุณอาจพลาดไป ซึ่งพร้อมให้ใช้งานแล้ว บนมือถือได้เช่นกัน:
- Android 3.0
-
Fragment
: องค์ประกอบเฟรมเวิร์กที่ช่วยให้คุณแยก องค์ประกอบของกิจกรรมให้เป็นโมดูลที่ทำงานได้ด้วยตนเองซึ่งกำหนด UI และวงจรของลูกค้าเอง โปรดดู คู่มือนักพัฒนาซอฟต์แวร์ส่วนย่อยActionBar
: การแทนที่แถบชื่อแบบดั้งเดิมที่ด้านบนของ หน้าต่างกิจกรรม โดยมีโลโก้แอปพลิเคชันที่มุมซ้ายและ อินเทอร์เฟซสำหรับรายการเมนู โปรดดู คู่มือนักพัฒนาซอฟต์แวร์แถบการดำเนินการLoader
: คอมโพเนนต์ของเฟรมเวิร์กที่ช่วยให้ทำงานไม่พร้อมกัน การโหลดข้อมูลร่วมกับคอมโพเนนต์ UI เพื่อโหลดข้อมูลแบบไดนามิกโดยไม่บล็อก เทรดหลัก โปรดดู คู่มือนักพัฒนาซอฟต์แวร์เครื่องมือโหลด- คลิปบอร์ดของระบบ: แอปพลิเคชันสามารถคัดลอกและวางข้อมูล (นอกเหนือจากข้อความ) ไปและกลับจาก คลิปบอร์ดของทั้งระบบ ข้อมูลที่ถูกตัดอาจเป็นข้อความธรรมดา URI หรือ Intent โปรดดู คู่มือนักพัฒนาซอฟต์แวร์คัดลอกและวาง
- ลากและวาง: ชุด API ที่ติดตั้งอยู่ในเฟรมเวิร์กมุมมองที่อำนวยความสะดวกในการลากและวาง การดำเนินงาน โปรดดู คู่มือนักพัฒนาซอฟต์แวร์ลากและวาง
- เฟรมเวิร์กภาพเคลื่อนไหวที่ยืดหยุ่นทั้งหมดช่วยให้คุณสามารถสร้างภาพเคลื่อนไหวคุณสมบัติที่กำหนดเอง (View, Drawable, Fragment, Object หรืออื่นๆ) และกำหนดลักษณะของภาพเคลื่อนไหว เช่น เป็นระยะเวลา การประมาณช่วง การทำซ้ำ และอื่นๆ เฟรมเวิร์กใหม่ทำให้ภาพเคลื่อนไหวใน Android ง่ายกว่าที่เคย โปรดดู นักพัฒนาภาพเคลื่อนไหวของพร็อพเพอร์ตี้
- กราฟิก RenderScript และเครื่องมือประมวลผล: RenderScript มีฟังก์ชัน 3 มิติประสิทธิภาพสูง การแสดงผลกราฟิกและ Compute API ที่ระดับเนทีฟซึ่งคุณเขียนด้วย C (มาตรฐาน C99) มอบประสิทธิภาพในระดับที่คุณคาดหวังจากสภาพแวดล้อมแบบดั้งเดิมในขณะที่ยังคงพกพาได้ ใน CPU และ GPU ที่หลากหลาย โปรดดู นักพัฒนาซอฟต์แวร์ RenderScript
- กราฟิก 2 มิติที่มีการเร่งความเร็วด้วยฮาร์ดแวร์: ตอนนี้คุณสามารถเปิดใช้งานโหมดแสดงภาพ OpenGL สำหรับ
โดยการตั้งค่า {android:hardwareAccelerated="true"} ใน
<application>
ขององค์ประกอบไฟล์ Manifest ของคุณ องค์ประกอบ หรือสำหรับ<activity>
แต่ละรายการ จากองค์ประกอบเหล่านี้ ผลการค้นหานี้ ด้วยภาพเคลื่อนไหวที่ลื่นไหลขึ้น การเลื่อนลื่นไหลขึ้น รวมถึงประสิทธิภาพโดยรวมที่ดีขึ้นและการตอบสนองต่อผู้ใช้ การโต้ตอบหมายเหตุ: หากคุณตั้งค่า
minSdkVersion
หรือtargetSdkVersion
ของแอปพลิเคชันเป็น"14"
ขึ้นไป การเร่งฮาร์ดแวร์จะเปิดใช้โดยค่าเริ่มต้น - และอื่นๆ อีกมากมาย โปรดดูแพลตฟอร์ม Android 3.0 สำหรับข้อมูลเพิ่มเติม
- Android 3.1
-
- USB API: API ใหม่ที่มีประสิทธิภาพสำหรับการผสานรวมอุปกรณ์ต่อพ่วงที่เชื่อมต่อเข้ากับ แอปพลิเคชัน Android API นี้อิงตามสแต็ก USB และบริการที่ ในตัวของแพลตฟอร์ม รวมถึงรองรับการโต้ตอบทั้งของโฮสต์ USB และอุปกรณ์ โปรดดูคู่มือนักพัฒนาซอฟต์แวร์โฮสต์และอุปกรณ์เสริม USB
- MTP/PTP API: แอปพลิเคชันสามารถโต้ตอบกับกล้องที่เชื่อมต่อและ PTP อื่นๆ ได้โดยตรง
อุปกรณ์เพื่อรับการแจ้งเตือนเมื่อมีการแนบและนำอุปกรณ์ออก จัดการไฟล์และพื้นที่เก็บข้อมูลใน
อุปกรณ์เหล่านั้น รวมถึงโอนไฟล์และข้อมูลเมตาไปและกลับจากอุปกรณ์เหล่านั้นได้ MTP API นำ PTP มาใช้
(Picture Transfer Protocol) ของข้อกำหนด MTP (Media Transfer Protocol) โปรดดู
เอกสารประกอบ
android.mtp
รายการ - RTP API: Android แสดง API ในสแต็ก RTP (Real-time Transport Protocol) ในตัว
แอปพลิเคชันที่สามารถใช้จัดการการสตรีมข้อมูลแบบออนดีมานด์หรืออินเทอร์แอกทีฟได้ โดยเฉพาะอย่างยิ่ง แอป
ที่ให้บริการ VOIP, ข้อความ Push, การประชุม และสตรีมมิงเสียงจะใช้ API เพื่อเริ่มต้นได้
เซสชันต่างๆ และส่งหรือได้รับสตรีมข้อมูลผ่านเครือข่ายใดก็ได้ที่มีอยู่ ดูเอกสารประกอบเกี่ยวกับ
android.net.rtp
- สนับสนุนจอยสติ๊กและอินพุตการเคลื่อนไหวทั่วไปอื่นๆ
- โปรดดูแพลตฟอร์ม Android 3.1 สำหรับ API ใหม่อื่นๆ อีกมากมาย
- Android 3.2
-
- หน้าจอใหม่รองรับ API ที่ช่วยให้ควบคุมการทำงานของแอปพลิเคชันได้มากขึ้น ที่แสดงในหน้าจอขนาดต่างๆ โดย API นี้จะขยายโมเดลการสนับสนุนหน้าจอที่มีอยู่เดิมด้วย ความสามารถในการกำหนดเป้าหมายช่วงขนาดหน้าจอที่เฉพาะเจาะจงอย่างแม่นยำตามมิติข้อมูล โดยวัดเป็น หน่วยพิกเซลที่ไม่ขึ้นกับความหนาแน่น (เช่น กว้าง 600dp หรือ 720dp) แทนที่จะกำหนดเป็นหน่วยพิกเซลทั่วไป ขนาดหน้าจอ (เช่น ใหญ่หรือใหญ่) ตัวอย่างเช่น สิ่งนี้มีความสำคัญในการช่วยคุณ แยกความแตกต่างระหว่างขนาด 5 นิ้ว และอุปกรณ์ขนาด 7 นิ้ว ที่ก่อนหน้านี้มีการฝากข้อมูล "ใหญ่" หน้าจอ ดูบล็อกโพสต์ เครื่องมือใหม่สำหรับการจัดการขนาดหน้าจอ
- ค่าคงที่ใหม่สำหรับ
<uses-feature>
เป็น ประกาศข้อกำหนดด้านการวางแนวหน้าจอแนวนอนหรือแนวตั้ง - "ขนาดหน้าจอ" ของอุปกรณ์ ตอนนี้การกำหนดค่าจะเปลี่ยนไปในระหว่างการวางแนวหน้าจอ
เปลี่ยน หากแอปกำหนดเป้าหมายเป็น API ระดับ 13 ขึ้นไป คุณต้องจัดการ
"screenSize"
การเปลี่ยนแปลงการกำหนดค่าหากคุณต้องการจัดการการเปลี่ยนแปลงการกำหนดค่าของ"orientation"
ด้วย โปรดดูandroid:configChanges
สำหรับข้อมูลเพิ่มเติม - โปรดดูแพลตฟอร์ม Android 3.2 หมายเหตุสำหรับ API ใหม่อื่นๆ
ระดับ API
API ของ Android 4.0 มีการกำหนดจำนวนเต็ม รหัส - 14 - ที่จัดเก็บในตัวระบบเอง ตัวระบุนี้เรียกว่า "ระดับ API" ซึ่งช่วยให้ระบบระบุได้อย่างถูกต้องว่า แอปพลิเคชันจะทำงานร่วมกับระบบได้ ก่อนติดตั้งแอปพลิเคชัน
ในการใช้ API ที่เปิดตัวใน Android 4.0 ในแอปพลิเคชันของคุณ คุณจะต้องคอมไพล์
กับแพลตฟอร์ม Android ที่รองรับ API ระดับ 14 หรือ
สูงขึ้น คุณอาจต้องเพิ่ม
android:minSdkVersion="14"
ให้กับ
<uses-sdk>
สำหรับข้อมูลเพิ่มเติม โปรดอ่าน API คืออะไร ระดับ