API ของ Android 3.1

ระดับ API: 12

สำหรับนักพัฒนาซอฟต์แวร์ แพลตฟอร์ม Android 3.1 (HONEYCOMB_MR1) มีให้บริการเป็น คอมโพเนนต์ที่ดาวน์โหลดได้สำหรับ Android SDK แพลตฟอร์มที่ดาวน์โหลดได้ประกอบด้วย ไลบรารี Android และรูปภาพระบบ รวมถึงชุดสกินโปรแกรมจำลองและ และอีกมากมาย แพลตฟอร์มที่ดาวน์โหลดได้ไม่มีไลบรารีภายนอก

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

ภาพรวมของ API

ส่วนต่างๆ ด้านล่างจะแสดงภาพรวมทางเทคนิคเกี่ยวกับสิ่งใหม่ๆ สำหรับนักพัฒนาซอฟต์แวร์ ใน Android 3.1 รวมถึงฟีเจอร์ใหม่ๆ และการเปลี่ยนแปลงในเฟรมเวิร์ก API นับตั้งแต่ เวอร์ชันก่อนหน้า

API ของ USB

Android 3.1 เปิดตัว API ใหม่ที่มีประสิทธิภาพสำหรับ การผสานรวมอุปกรณ์ต่อพ่วงที่เชื่อมต่อกับแอปพลิเคชันที่ทำงานบนแพลตฟอร์ม API นี้อิงตามสแต็ก USB (Universal Serial Bus) และบริการที่ ไว้ในแพลตฟอร์ม รวมถึงการสนับสนุนทั้งสำหรับโฮสต์และอุปกรณ์ USB การโต้ตอบ เมื่อใช้ API นักพัฒนาสามารถสร้างแอปพลิเคชันที่สามารถ ค้นพบ ติดต่อ และจัดการอุปกรณ์หลากหลายประเภทที่เชื่อมต่อ USB

สแต็กและ API แยกความแตกต่างของฮาร์ดแวร์ USB พื้นฐาน 2 ประเภท อุปกรณ์ที่ใช้ Android ทำหน้าที่เป็นโฮสต์หรือฮาร์ดแวร์ภายนอก ทำหน้าที่เป็นโฮสต์:

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

สำหรับทั้ง 2 ประเภท — อุปกรณ์ USB และอุปกรณ์เสริม USB — USB API ของแพลตฟอร์มรองรับการค้นพบโดยการออกอากาศผ่าน Intent เมื่อแนบหรือ ถอดออก รวมถึงอินเทอร์เฟซมาตรฐาน ปลายทาง และโหมดการโอน (ควบคุม แบบกลุ่ม และรบกวน)

USB API มีอยู่ในแพ็กเกจ android.hardware.usb คลาสส่วนกลางคือ UsbManager ซึ่งให้ วิธีการที่เป็นตัวช่วยสำหรับการระบุและสื่อสารกับ ทั้งอุปกรณ์ USB และอุปกรณ์เสริม USB แอปพลิเคชันสามารถรับอินสแตนซ์ของ UsbManager แล้วค้นหารายการไฟล์แนบ อุปกรณ์หรืออุปกรณ์เสริม แล้วสื่อสารหรือจัดการอุปกรณ์เหล่านั้น UsbManager ยังประกาศการดำเนินการผ่าน Intent ที่ ออกอากาศของระบบ เพื่อประกาศเมื่อมีอุปกรณ์หรืออุปกรณ์เสริม USB หรือ ถอดออกแล้ว

ชั้นเรียนอื่นๆ ได้แก่

  • UsbDevice เป็นชั้นเรียนที่แสดงถึงภายนอก ฮาร์ดแวร์ที่เชื่อมต่อเป็นอุปกรณ์ USB (โดยอุปกรณ์ที่ใช้ Android ทำหน้าที่เป็น ของคุณ)
  • UsbAccessory แสดงฮาร์ดแวร์ภายนอก เชื่อมต่อเป็นโฮสต์ USB (โดยอุปกรณ์ที่ใช้ Android ทำหน้าที่เป็น USB อุปกรณ์)
  • UsbInterface และ UsbEndpoint ซึ่งให้สิทธิ์เข้าถึง USB มาตรฐาน ของอินเทอร์เฟซและปลายทางสำหรับอุปกรณ์
  • UsbDeviceConnection และ UsbRequest สำหรับการส่งและรับข้อมูลและการควบคุม ข้อความไปยังหรือจากอุปกรณ์ USB แบบซิงโครนัสและอะซิงโครนัส
  • UsbConstants ซึ่งมีค่าคงที่สำหรับ การประกาศประเภทปลายทาง คลาสของอุปกรณ์ และอื่นๆ

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

นอกจากนี้ นักพัฒนาซอฟต์แวร์ยังสามารถขอให้กรองใน Google Play แอปพลิเคชันของตนจะไม่พร้อมให้บริการสำหรับผู้ใช้ที่ไม่มีอุปกรณ์ให้ การสนับสนุน USB ที่เหมาะสม หากต้องการส่งคำขอการกรอง ให้เพิ่มองค์ประกอบ 1 หรือทั้ง 2 อย่าง ด้านล่างลงในไฟล์ Manifest ของแอปพลิเคชันตามความเหมาะสม:

  • ในกรณีที่ควรมองเห็นแอปพลิเคชันในอุปกรณ์ที่รองรับ USB เท่านั้น โหมดโฮสต์ (การเชื่อมต่ออุปกรณ์ USB) ให้ประกาศองค์ประกอบนี้

    <uses-feature android:name="android.hardware.usb.host" android:required="true">

  • ในกรณีที่ควรมองเห็นแอปพลิเคชันในอุปกรณ์ที่รองรับ USB เท่านั้น อุปกรณ์เสริม (การเชื่อมต่อโฮสต์ USB) ให้ประกาศองค์ประกอบนี้

    <uses-feature android:name="android.hardware.usb.accessory" android:required="true">

หากต้องการทราบข้อมูลทั้งหมดเกี่ยวกับวิธีพัฒนาแอปพลิเคชันที่โต้ตอบกับ อุปกรณ์เสริม USB โปรดดูที่ เอกสารประกอบสำหรับนักพัฒนาซอฟต์แวร์

ดูตัวอย่างแอปพลิเคชันที่ใช้ API โฮสต์ USB ได้ที่การทดสอบ ADB และมิสไซล์ Launcher

API ของ MTP/PTP

Android 3.1 เปิดตัว MTP API ใหม่ที่ช่วยให้แอปพลิเคชันโต้ตอบได้โดยตรง ด้วยกล้องที่เชื่อมต่อและอุปกรณ์ PTP อื่นๆ API ใหม่ทำให้ แอปพลิเคชันเพื่อรับการแจ้งเตือนเมื่อมีการแนบและนำอุปกรณ์ออก จัดการไฟล์และพื้นที่เก็บข้อมูลในอุปกรณ์เหล่านั้น รวมถึงโอนไฟล์และข้อมูลเมตาไปยัง และจากรูปภาพเหล่านั้น MTP API ใช้ชุดย่อยของ PTP (Picture Transfer Protocol) ตามข้อกำหนดของ MTP (Media Transfer Protocol)

MTP API มีอยู่ในแพ็กเกจ android.mtp และให้ ชั้นเรียนเหล่านี้

  • MtpDevice สรุปอุปกรณ์ MTP ที่ เชื่อมต่อผ่านบัสของโฮสต์ USB แอปพลิเคชันสามารถสร้างอินสแตนซ์ของออบเจ็กต์ ประเภทนี้ แล้วใช้วิธีการของโมเดลดังกล่าว เพื่อรับข้อมูลเกี่ยวกับอุปกรณ์และ เก็บไว้ รวมทั้งการเปิดการเชื่อมต่อและการถ่ายโอนข้อมูล ตัวอย่างวิธีดังกล่าวมีดังนี้
    • getObjectHandles() แสดงรายการแฮนเดิลสำหรับออบเจ็กต์ทั้งหมดในอุปกรณ์ที่ ตรงกับรูปแบบที่ระบุและระดับบนสุด หากต้องการหาข้อมูลเกี่ยวกับออบเจ็กต์ ให้ทำดังนี้ แอปพลิเคชันสามารถส่งแฮนเดิลไปยัง getObjectInfo()
    • importFile() อนุญาตให้แอปพลิเคชันคัดลอกข้อมูลของออบเจ็กต์ไปยังไฟล์ภายนอก พื้นที่เก็บข้อมูล การเรียกใช้นี้อาจบล็อกเป็นเวลาตามกำหนด ขึ้นอยู่กับ ขนาดของข้อมูลและความเร็วของอุปกรณ์ ดังนั้นควรสร้างจากอัตราการเชื่อมต่อ ชุดข้อความ
    • open() ช่วยให้แอปพลิเคชันเปิดอุปกรณ์ MTP/PTP ที่เชื่อมต่อได้
    • getThumbnail() ทำรีเทิร์น ภาพขนาดย่อของออบเจ็กต์เป็นอาร์เรย์ไบต์
  • MtpStorageInfo เก็บข้อมูลเกี่ยวกับพื้นที่เก็บข้อมูล บนอุปกรณ์ MTP ซึ่งตรงกับชุดข้อมูล StorageInfo ที่อธิบายไว้ใน ส่วนที่ 5.2.2 ของข้อกำหนด MTP เมธอดในชั้นเรียนอนุญาตให้แอปพลิเคชัน รับสตริงคำอธิบาย พื้นที่ว่าง ความจุพื้นที่เก็บข้อมูลสูงสุด รหัสพื้นที่เก็บข้อมูล และตัวระบุปริมาณ
  • MtpDeviceInfo มีข้อมูลเกี่ยวกับอุปกรณ์ MTP สอดคล้องกับชุดข้อมูล DeviceInfo ตามที่อธิบายไว้ในส่วน 5.1.1 ของ MTP เมธอดในชั้นเรียนจะให้แอปพลิเคชันรับ ผู้ผลิต รุ่น หมายเลขซีเรียล และเวอร์ชัน
  • MtpObjectInfo เก็บข้อมูลเกี่ยวกับออบเจ็กต์ที่จัดเก็บไว้ บนอุปกรณ์ MTP ที่สอดคล้องกับชุดข้อมูล ObjectInfo ซึ่งอธิบายไว้ในส่วน 5.3.1 ของข้อกำหนด MTP เมธอดในคลาสทำให้แอปพลิเคชันสามารถรับ ขนาดของออบเจ็กต์ รูปแบบข้อมูล ประเภทการเชื่อมโยง วันที่สร้าง และภาพขนาดย่อ
  • MtpConstants มีค่าคงที่สำหรับการประกาศไฟล์ MTP รูปแบบรหัส ประเภทการเชื่อมโยง และสถานะการป้องกัน

การสนับสนุนอุปกรณ์อินพุตใหม่และเหตุการณ์การเคลื่อนไหว

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

แพลตฟอร์มรองรับอินพุตเมาส์ ลูกกลิ้ง และแทร็กบอล การทำงานเหตุการณ์การเคลื่อนไหวใหม่ 2 รายการดังนี้

  • ACTION_SCROLL ซึ่งอธิบายเคอร์เซอร์ ตำแหน่งที่มีการเคลื่อนไหวการเลื่อนแบบไม่สัมผัส เช่น จากล้อเลื่อนของเมาส์ ก็เกิดขึ้น ใน MotionEvent ค่าของแกน AXIS_HSCROLL และ AXIS_VSCROLL จะระบุการเลื่อนแบบสัมพัทธ์ การเคลื่อนไหว
  • ACTION_HOVER_MOVE รายงานสถานการณ์ปัจจุบัน ของเมาส์เมื่อไม่ได้กดปุ่ม เช่นเดียวกับปุ่มระหว่างกลาง คะแนนนับตั้งแต่ HOVER_MOVE ครั้งล่าสุด วางเมาส์เหนือปุ่มเข้าและออก ยังไม่รองรับการแจ้งเตือน

เพื่อรองรับจอยสติ๊กและเกมแพด คลาส InputDevice มีแหล่งที่มาของอุปกรณ์อินพุตใหม่ต่อไปนี้

เพื่ออธิบายเหตุการณ์การเคลื่อนไหวจากแหล่งที่มาใหม่เหล่านี้ รวมถึงเหตุการณ์จากเมาส์ และแทร็กบอล ตอนนี้แพลตฟอร์มจะกำหนดรหัสแกนบน MotionEvent ซึ่งคล้ายกับการกำหนดรหัสหลักใน KeyEvent รหัสแกนใหม่สำหรับจอยสติ๊ก และเกมคอนโทรลเลอร์ประกอบด้วย AXIS_HAT_X, AXIS_HAT_Y, AXIS_RTRIGGER, AXIS_ORIENTATION, AXIS_THROTTLE และอีกหลายคน แกน MotionEvent ที่มีอยู่จะแสดงด้วย AXIS_X, AXIS_Y AXIS_PRESSURE, AXIS_SIZE, AXIS_TOUCH_MAJOR, AXIS_TOUCH_MINOR, AXIS_TOOL_MAJOR, AXIS_TOOL_MINOR และ AXIS_ORIENTATION

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

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

บางแกนสามารถเรียกดูได้โดยใช้เมธอดตัวเข้าถึงแบบพิเศษ ตัวอย่างเช่น แอปพลิเคชันจะโทรหา getX() แทนการโทรหา getAxisValue() ได้ แกนที่มีตัวเข้าถึงในตัว ได้แก่ AXIS_X, AXIS_Y, AXIS_PRESSURE, AXIS_SIZE, AXIS_TOUCH_MAJOR, AXIS_TOUCH_MINOR, AXIS_TOOL_MAJOR, AXIS_TOOL_MINOR และ AXIS_ORIENTATION

อุปกรณ์อินพุตแต่ละเครื่องจะมีรหัสที่ไม่ซ้ำกัน ซึ่งได้รับจากระบบ และอาจมี แหล่งที่มาหลายแห่ง เมื่ออุปกรณ์ให้แหล่งที่มาหลายแห่ง แหล่งที่มามากกว่า 1 แห่ง สามารถให้ข้อมูลแกนโดยใช้แกนเดียวกันได้ ตัวอย่างเช่น กิจกรรมการแตะที่กำลังจะเกิดขึ้น จากแหล่งสัมผัสจะใช้แกน X สำหรับข้อมูลตำแหน่งหน้าจอ ขณะที่จอยสติ๊ก เหตุการณ์ที่มาจากจอยสติ๊กจะใช้แกน X สำหรับตำแหน่งสติ๊ก แทน ด้วยเหตุนี้ จึงเป็นเรื่องสำคัญที่แอปพลิเคชันจะต้องตีความแกน ตามแหล่งที่มาที่เกิด เมื่อจัดการกับการเคลื่อนไหว แอปพลิเคชันควรใช้เมธอดใน InputDevice เพื่อกำหนดแกนที่อุปกรณ์หรือแหล่งที่มารองรับ โดยเฉพาะอย่างยิ่ง แอปพลิเคชันสามารถใช้ getMotionRanges() เพื่อค้นหาแกนทุกแกนของอุปกรณ์หรือทุกแกน แหล่งที่มาของอุปกรณ์ ในทั้ง 2 กรณี ข้อมูลช่วงสำหรับแกนที่แสดงผลใน ออบเจ็กต์ InputDevice.MotionRange ระบุแหล่งที่มาของ แต่ละค่าแกน

สุดท้าย ตั้งแต่เหตุการณ์การเคลื่อนไหวจากจอยสติ๊ก เกมแพด เมาส์ และ แทร็กบอลไม่ใช่เหตุการณ์ที่มีการสัมผัส แพลตฟอร์ม ได้เพิ่มเมธอด Callback ใหม่สำหรับ ส่งไปยัง View แบบ "ทั่วไป" เหตุการณ์การเคลื่อนไหว โดยเฉพาะ โดยจะรายงานเหตุการณ์การเคลื่อนไหวแบบไม่ใช่การสัมผัสกับ View ผ่านการโทรหา onGenericMotionEvent() ไม่ใช่ onTouchEvent()

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

หากต้องการดูตัวอย่างแอปพลิเคชันที่ใช้การเคลื่อนที่ของจอยสติ๊ก โปรดดูเหตุการณ์ โปรดดู GameControllerInput และ GameView

API RTP

Android 3.1 เปิดตัว API ใน RTP (โปรโตคอลการส่งแบบเรียลไทม์) ในตัว ที่แอปพลิเคชันสามารถใช้เพื่อจัดการข้อมูลตามความต้องการหรือข้อมูลแบบโต้ตอบได้ สตรีมมิง โดยเฉพาะอย่างยิ่ง แอปที่ให้บริการ VOIP, การกดเพื่อพูด, การประชุม และการสตรีมเสียงสามารถใช้ API เพื่อเริ่มต้นเซสชันและส่งหรือได้รับ สตรีมข้อมูลผ่านเครือข่ายใดก็ได้

RTP API มีอยู่ในแพ็กเกจ android.net.rtp คลาส รวมข้อมูลต่อไปนี้

  • RtpStream ซึ่งเป็นคลาสฐานของสตรีมที่ส่งและ รับแพ็กเก็ตเครือข่ายด้วยเพย์โหลดสื่อผ่าน RTP
  • AudioStream ซึ่งเป็นคลาสย่อยของ RtpStream ที่มีเพย์โหลดเสียงผ่าน RTP
  • AudioGroup ศูนย์กลางเสียงในเครื่องสำหรับจัดการและ กำลังมิกซ์ลำโพง ไมโครโฟน และ AudioStream ของอุปกรณ์
  • AudioCodec ซึ่งมีคอลเล็กชันของตัวแปลงรหัสที่ ที่คุณกำหนดสำหรับ AudioStream

แอปพลิเคชันจะสร้างอินสแตนซ์เพื่อรองรับการประชุมทางเสียงและการใช้งานที่คล้ายกัน 2 คลาสเป็นปลายทางสำหรับสตรีม

  • AudioStream ระบุปลายทางระยะไกลและประกอบด้วย ของการแมปเครือข่าย และ AudioCodec ที่กำหนดค่าไว้
  • AudioGroup แสดงถึงปลายทางในเครื่องสำหรับ 1 AudioStream ขึ้นไป มิกซ์ของ AudioGroup AudioStream ทั้งหมดและโต้ตอบกับอุปกรณ์หรือไม่ก็ได้ ลำโพงและไมโครโฟนพร้อมกัน

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

หากต้องการใช้ RTP API แอปพลิเคชันต้องขอสิทธิ์จากผู้ใช้ภายในวันที่ กำลังประกาศ <uses-permission android:name="android.permission.INTERNET"> ในไฟล์ Manifest คุณต้องมีสิทธิ์ <uses-permission android:name="android.permission.RECORD_AUDIO"> จึงจะรับไมโครโฟนของอุปกรณ์ได้ด้วย

วิดเจ็ตแอปที่ปรับขนาดได้

เริ่มตั้งแต่ Android 3.1 เป็นต้นไป นักพัฒนาซอฟต์แวร์จะสามารถสร้างวิดเจ็ตบนหน้าจอหลักของตน ปรับขนาดได้ — แนวนอน แนวตั้ง หรือในทั้ง 2 แกน ผู้ใช้แตะค้าง วิดเจ็ตเพื่อแสดงแฮนเดิลปรับขนาด จากนั้นลากแนวนอนและ/หรือแนวตั้ง แฮนเดิลเพื่อเปลี่ยนขนาดในตารางเลย์เอาต์

นักพัฒนาซอฟต์แวร์สามารถทำให้วิดเจ็ตบนหน้าจอหลัก ปรับขนาดได้โดยกำหนด resizeMode ในข้อมูลเมตา AppWidgetProviderInfo ของวิดเจ็ต ค่าสำหรับ แอตทริบิวต์ resizeMode ประกอบด้วย "แนวนอน" "ประเภทธุรกิจ" และ "ไม่มี" หากต้องการประกาศว่าวิดเจ็ตปรับขนาดได้ทั้งในแนวตั้งและแนวนอน ให้ระบุค่า "แนวนอน|แนวตั้ง"

ตัวอย่างเช่น

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="294dp"
    android:minHeight="72dp"
    android:updatePeriodMillis="86400000"
    android:previewImage="@drawable/preview"
    android:initialLayout="@layout/example_appwidget"
    android:configure="com.example.android.ExampleAppWidgetConfigure"
    android:resizeMode="horizontal|vertical" >
</appwidget-provider>

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

เฟรมเวิร์กของภาพเคลื่อนไหว

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

      การใช้ ViewPropertyAnimator นั้นไม่ซับซ้อน วิธีทำให้พร็อพเพอร์ตี้สำหรับ View โทรหา animate() ถึง สร้างออบเจ็กต์ ViewPropertyAnimator สำหรับ View นั้น ใช้เมนู ใน ViewPropertyAnimator เพื่อระบุพร็อพเพอร์ตี้ที่จะ ทำอย่างไรให้เป็นภาพเคลื่อนไหว เช่น หากต้องการลด View เป็นโปร่งใส โทรหา alpha(0); ออบเจ็กต์ ViewPropertyAnimator จัดการรายละเอียดการกำหนดค่าคลาส Animator ที่สำคัญและเริ่มต้นคลาส จากนั้นแสดงผล ภาพเคลื่อนไหว

  • สีพื้นหลังของภาพเคลื่อนไหว
    • getBackgroundColor() และ setBackgroundColor(int) วิธีทำให้ คุณตั้งค่าสีพื้นหลังหลังภาพเคลื่อนไหว สำหรับภาพเคลื่อนไหวบนหน้าต่าง เท่านั้น ปัจจุบันพื้นหลังต้องเป็นสีดำโดยมีระดับอัลฟ่าตามที่ต้องการ
  • กำลังรับเศษส่วนที่เคลื่อนไหวจาก ViewAnimator
    • getAnimatedFraction()รายการใหม่ วิธีการ ช่วยให้คุณรับเศษส่วนปัจจุบันของภาพเคลื่อนไหว ซึ่งก็คือส่วนที่ผ่าน/แปลไปแล้ว เศษส่วนที่ใช้ในการอัปเดตเฟรมครั้งล่าสุด — จาก ValueAnimator

เฟรมเวิร์ก UI

  • การบังคับการแสดงผลของเลเยอร์
    • เมธอด buildLayer() ใหม่ช่วยให้แอปพลิเคชัน บังคับให้สร้างเลเยอร์ของมุมมองและแสดงผลมุมมองลงในเลเยอร์นั้นทันที ตัวอย่างเช่น แอปพลิเคชันสามารถใช้เมธอดนี้เพื่อแสดงผลมุมมองลงใน ก่อนเริ่มภาพเคลื่อนไหว หากมุมมองมีความซับซ้อน จะแสดงผลเป็น เลเยอร์ก่อนเริ่มภาพเคลื่อนไหวจะหลีกเลี่ยงการข้ามเฟรม
  • ระยะห่างของกล้อง
    • แอปพลิเคชันสามารถใช้วิธีการใหม่ได้ setCameraDistance(float) เพื่อกำหนดระยะห่างจาก กล้อง ไปยังข้อมูลพร็อพเพอร์ตี้ วิธีนี้จะช่วยให้แอปพลิเคชันควบคุมการเปลี่ยนรูปแบบ 3 มิติของ มุมมอง เช่น การหมุน
  • กำลังเรียกดูมุมมองปฏิทินจาก Date Picker
  • การรับ Callback เมื่อมีการแยกข้อมูลพร็อพเพอร์ตี้ออก
  • Listener เบรดครัมบ์ Fragment, ลายเซ็น onInflate() ใหม่
    • วิธีการใหม่ setOnBreadCrumbClickListener() เป็นฮุกที่ทำให้ จะสกัดกั้นการคลิกเบรดครัมบ์แบบแยกส่วนและดำเนินการที่จำเป็น ก่อนที่จะไปยังรายการหรือส่วนย่อยที่ถูกคลิก
    • ในชั้นเรียน Fragment เราเลิกใช้งาน onInflate(attrs, savedInstanceState) แล้ว โปรดใช้ onInflate(activity, attrs, savedInstanceState) แทน
  • แสดงผลการค้นหาในแท็บใหม่
    • คีย์ข้อมูล EXTRA_NEW_SEARCH สำหรับ Intent ACTION_WEB_SEARCH ช่วยให้คุณเปิดการค้นหาใน แท็บเบราว์เซอร์ใหม่ แทนในแท็บที่มีอยู่
  • เคอร์เซอร์ข้อความที่วาดได้
    • ตอนนี้คุณสามารถระบุที่ถอนออกได้เพื่อใช้เป็นเคอร์เซอร์ข้อความแล้วโดยใช้ แอตทริบิวต์ทรัพยากร textCursorDrawable
  • การตั้งค่ารายการย่อยที่แสดงในมุมมองระยะไกล
  • คีย์ทั่วไปสำหรับเกมแพดและอุปกรณ์อินพุตอื่นๆ
    • KeyEvent เพิ่มช่วงของคีย์โค้ดทั่วไปไปยัง รองรับปุ่มเกมแพด ชั้นเรียนยังเพิ่ม isGamepadButton(int) และอีกหลายรายการ เมธอดตัวช่วยในการทำงานกับรหัสคีย์

กราฟิก

  • ตัวช่วยสำหรับการจัดการบิตแมป
    • setHasAlpha(boolean) ช่วยให้แอประบุว่า เป็นที่ทราบว่าพิกเซลทั้งหมดในบิตแมปเป็นแบบทึบ (เท็จ) หรือบางส่วน พิกเซลอาจมีค่าอัลฟ่าที่ไม่ทึบแสง (จริง) โปรดทราบว่าสำหรับการกำหนดค่าบางรายการ (เช่น เป็น RGB_565) การเรียกนี้จะไม่มีผล เนื่องจากไม่รองรับอัลฟ่าต่อพิกเซล วิธีนี้ใช้เป็นแนวทางการวาด เช่นในบางกรณี บิตแมปที่เป็นที่รู้จัก การเป็นแบบทึบสามารถใช้กรอบการเขียนได้เร็วกว่าแบบที่ไม่ทึบแสง ค่าอัลฟ่าต่อพิกเซล
    • getByteCount() รับขนาดของบิตแมปใน ไบต์
    • getGenerationId() ช่วยให้แอปพลิเคชันค้นหา ดูว่ามีการแก้ไขบิตแมปหรือไม่ เช่น สำหรับการแคช
    • sameAs(android.graphics.Bitmap) กำหนด ว่าบิตแมปที่ระบุแตกต่างจากบิตแมปปัจจุบันในมิติข้อมูลหรือไม่ การกำหนดค่า หรือข้อมูลพิกเซล
  • การตั้งค่าตำแหน่งและการหมุนของกล้อง
    • Camera เพิ่มสองเมธอดใหม่ rotate() และ setLocation() สำหรับ การควบคุมของ ตําแหน่งของกล้องสำหรับการแปลงเป็น 3 มิติ

เครือข่าย

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

      หากต้องการสร้างการล็อกประสิทธิภาพสูง ให้ส่ง WIFI_MODE_FULL_HIGH_PERF เป็นโหมดล็อกใน โทรหา createWifiLock()

  • สถิติการเข้าชมเพิ่มเติม
    • ขณะนี้แอปพลิเคชันสามารถเข้าถึงสถิติการใช้งานเครือข่ายประเภทต่างๆ ได้มากขึ้นแล้ว โดยใช้วิธีการใหม่ใน TrafficStats แอปพลิเคชันสามารถใช้ วิธีการในการรับสถิติ UDP, จำนวนแพ็กเก็ต, ไบต์เพย์โหลดที่ส่ง/รับ TCP และ กลุ่มสำหรับ UID ที่กำหนด
  • ชื่อผู้ใช้การตรวจสอบสิทธิ์ SIP
    • แอปพลิเคชันจะรับและตั้งค่าชื่อผู้ใช้การตรวจสอบสิทธิ์ SIP สำหรับโปรไฟล์ได้แล้ว โดยใช้ เมธอดใหม่ getAuthUserName() และ setAuthUserName()

ตัวจัดการการดาวน์โหลด

  • การจัดการการดาวน์โหลดที่เสร็จสมบูรณ์
    • ตอนนี้แอปพลิเคชันสามารถเริ่มการดาวน์โหลดที่แจ้งเตือนผู้ใช้เฉพาะบน อัตโนมัติ ในการเริ่มต้นการดาวน์โหลดประเภทนี้ แอปพลิเคชันจะส่ง VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION ในเมธอด setNotificationVisibility() ของ อ็อบเจกต์คำขอ
    • วิธีการใหม่ "addCompletedDownload()" ช่วยให้แอปพลิเคชันเพิ่มไฟล์ไปยัง ดาวน์โหลดฐานข้อมูลเพื่อให้แอปพลิเคชันดาวน์โหลดสามารถจัดการได้
  • แสดงการดาวน์โหลดที่จัดเรียงตามขนาด
    • แอปพลิเคชันสามารถเริ่มการทำงานของแอปพลิเคชันดาวน์โหลดในโหมดจัดเรียงตามขนาดได้โดย การเพิ่ม INTENT_EXTRAS_SORT_BY_SIZE รายการใหม่ลงใน Intent ACTION_VIEW_DOWNLOADS

เฟรมเวิร์ก IME

  • การรับคีย์ค่าพิเศษของวิธีการป้อนข้อมูล
    • InputMethodSubtype จะเพิ่ม วิธีการ containsExtraValueKey() เพื่อดูว่ามีการจัดเก็บสตริง ExtraValue หรือไม่ สำหรับประเภทย่อยและ เมธอด getExtraValueOf() เพื่อดึงค่าคีย์ที่เฉพาะเจาะจงจากแฮชแมป ExtraValue

สื่อ

  • รูปแบบเสียงสตรีมมิงใหม่
    • เฟรมเวิร์กสื่อเพิ่มการรองรับในตัวสำหรับเนื้อหา AAC ดิบของ ADTS สำหรับ เสียงสตรีมที่ได้รับการปรับปรุง รวมถึงการรองรับเสียง FLAC เพื่อคุณภาพสูงสุด เนื้อหาเสียงที่บีบอัด (แบบไม่สูญเสียรายละเอียด) โปรดดูรูปแบบสื่อที่รองรับ เพื่อดูข้อมูลเพิ่มเติม

เปิดตัวควบคุมเมื่อหยุด แอปพลิเคชัน

เริ่มตั้งแต่ Android 3.1 ตัวจัดการแพ็กเกจของระบบจะติดตาม แอปพลิเคชันต่างๆ ที่อยู่ในสถานะหยุดใช้งาน และเป็นช่องทางในการควบคุม การเปิดตัวจากกระบวนการเบื้องหลังและแอปพลิเคชันอื่นๆ

โปรดทราบว่าสถานะหยุดของแอปพลิเคชันจะไม่เหมือนกัน สถานะหยุด ระบบจะจัดการสถานะหยุดทั้งสองแบบแยกกัน

แพลตฟอร์มจะกำหนดแฟล็ก Intent ใหม่ 2 รายการเพื่อให้ผู้ส่งระบุได้ ควรอนุญาตให้ Intent เปิดใช้งานคอมโพเนนต์ใน "หยุด" หรือไม่ แอปพลิเคชัน

  • FLAG_INCLUDE_STOPPED_PACKAGES - รวมตัวกรอง Intent ของแอปพลิเคชันที่หยุดทำงานแล้วในรายการเป้าหมายที่เป็นไปได้ เพื่อแก้ไข
  • FLAG_EXCLUDE_STOPPED_PACKAGES - ไม่รวมตัวกรอง Intent ของแอปพลิเคชันที่หยุดแล้วจากรายการ เป้าหมาย

เมื่อไม่ได้กำหนดแฟล็กทั้งสองนี้หรือทั้งสองแบบใน Intent ค่าเริ่มต้น คือการรวมตัวกรองของแอปพลิเคชันที่หยุดในรายการ เป้าหมายที่เป็นไปได้

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

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

การแจ้งเตือนการเปิดใช้งานและการอัปเกรดแอปพลิเคชันครั้งแรก

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

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

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

ยูทิลิตีหลัก

  • แคช LRU
    • ชั้นเรียน LruCache ใหม่ทำให้แอปพลิเคชันของคุณได้รับประโยชน์ การแคชที่มีประสิทธิภาพ แอปพลิเคชันจะใช้ชั้นเรียนเพื่อลดเวลาที่ใช้ได้ การประมวลผลหรือดาวน์โหลดข้อมูลจากเครือข่าย ขณะเดียวกันก็ยังคง ร่องรอยหน่วยความจำสำหรับข้อมูลที่แคชไว้ LruCache เป็นแคช ที่มีการอ้างอิงถึงคุณค่าในจำนวนที่จำกัด ทุกครั้งที่ค่า ระบบจะย้ายไปที่ส่วนหัวของคิว เมื่อมีการเพิ่มค่าลงใน แคช ค่าที่อยู่ท้ายคิวจะถูกนำออกและอาจมีสิทธิ์สำหรับ กับระบบเก็บขยะ
  • ตัวบอกไฟล์เป็น int
    • ตอนนี้คุณสามารถรับ intor ของไฟล์เนทีฟสำหรับ ParcelFileDescriptor โดยใช้เมธอดใหม่ getFd() หรือ detachFd() ได้แล้ว

WebKit

  • คุกกี้รูปแบบไฟล์
    • ตอนนี้ CookieManager รองรับคุกกี้ที่ใช้ เวลา รูปแบบ URI file: คุณสามารถใช้ setAcceptFileSchemeCookies() เพื่อ เปิด/ปิดใช้การรองรับคุกกี้รูปแบบไฟล์ก่อนสร้างอินสแตนซ์ ของ WebView หรือ CookieManager ใน CookieManager คุณตรวจสอบได้ว่าคุกกี้รูปแบบไฟล์หรือไม่ เปิดใช้โดยการเรียกใช้ allowFileSchemeCookies()
  • การแจ้งเตือนคำขอเข้าสู่ระบบ
    • เพื่อรองรับคุณลักษณะการเข้าสู่ระบบอัตโนมัติของเบราว์เซอร์ที่เปิดตัวใน Android 3.0 ใหม่ เมธอด onReceivedLoginRequest() แจ้งโฮสต์ ที่คำขอเข้าสู่ระบบอัตโนมัติสำหรับผู้ใช้ได้รับการประมวลผล
  • ชั้นเรียนและอินเทอร์เฟซที่นำออก
    • มีการนำคลาสและอินเทอร์เฟซหลายรายการออกจาก API สาธารณะหลังจากนั้น ก่อนหน้านี้อยู่ในสถานะเลิกใช้งาน โปรดดู API รายงานความแตกต่างสำหรับข้อมูลเพิ่มเติม

เบราว์เซอร์

แอปพลิเคชันเบราว์เซอร์เพิ่มฟีเจอร์ต่อไปนี้เพื่อรองรับการใช้เว็บ แอปพลิเคชัน:

  • รองรับการเล่นวิดีโอที่ฝังอยู่ใน HTML5 ในหน้า แท็ก <video> การเล่นจะมีการเร่งฮาร์ดแวร์เมื่อเป็นไปได้
  • การสนับสนุนเลเยอร์สำหรับเอลิเมนต์ที่มีตำแหน่งคงที่สำหรับทุกไซต์ (อุปกรณ์เคลื่อนที่และ เดสก์ท็อป)

ค่าคงที่ของฟีเจอร์ใหม่

แพลตฟอร์มนี้เพิ่มค่าคงที่ของฟีเจอร์ฮาร์ดแวร์ใหม่ๆ ที่นักพัฒนาแอปประกาศได้ ในไฟล์ Manifest ของแอปพลิเคชันเพื่อแจ้งแก่บุคคลภายนอก เช่น Google เล่นข้อกำหนดของแอปพลิเคชันสำหรับความสามารถใหม่ของฮาร์ดแวร์ที่รองรับ ในแพลตฟอร์มเวอร์ชันนี้ นักพัฒนาแอปประกาศฟีเจอร์เหล่านี้และฟีเจอร์อื่นๆ ค่าคงที่ในองค์ประกอบไฟล์ Manifest <uses-feature>

  • android.hardware.usb.accessory — แอปพลิเคชันใช้สาย USB API ในการสื่อสารกับอุปกรณ์ฮาร์ดแวร์ภายนอกที่เชื่อมต่อผ่าน USB และ ทำหน้าที่เป็นโฮสต์
  • android.hardware.usb.host — แอปพลิเคชันใช้ USB API เพื่อสื่อสารกับอุปกรณ์ฮาร์ดแวร์ภายนอกที่เชื่อมต่อผ่าน USB และทำหน้าที่เป็น อุปกรณ์

Google Play จะกรองแอปพลิเคชันตามฟีเจอร์ที่ประกาศในองค์ประกอบของไฟล์ Manifest <uses-feature> สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ หากประกาศคุณลักษณะในไฟล์ Manifest ของแอปพลิเคชัน โปรดอ่านที่Google Play ตัวกรอง

รายงานความแตกต่างของ API

สำหรับมุมมองโดยละเอียดของการเปลี่ยนแปลง API ทั้งหมดใน Android 3.1 (API ระดับ 12) โปรดดู API รายงานความแตกต่าง

ระดับ API

แพลตฟอร์ม Android 3.1 มีรุ่นอัปเดตของ Framework API API ของ Android 3.1 ได้รับตัวระบุจำนวนเต็ม 12 — ซึ่งก็คือ ที่จัดเก็บไว้ในตัวระบบเอง ตัวระบุนี้เรียกว่า "ระดับ API" ช่วยให้ เพื่อพิจารณาอย่างถูกต้องว่าแอปพลิเคชันสามารถทำงานร่วมกับ ระบบก่อนที่จะติดตั้งแอปพลิเคชัน

หากต้องการใช้ API ที่เปิดตัวใน Android 3.1 ในแอปพลิเคชันของคุณ คุณจะต้องรวบรวมแอปพลิเคชันกับไลบรารี Android ซึ่งมีให้ไว้ใน แพลตฟอร์ม Android 3.1 SDK ทั้งนี้ขึ้นอยู่กับความต้องการของคุณ อาจ ต้องเพิ่ม android:minSdkVersion="12" ด้วย ลงในเอลิเมนต์ <uses-sdk> ในแอปพลิเคชัน ไฟล์ Manifest

สำหรับข้อมูลเพิ่มเติม โปรดอ่าน API คืออะไร ระดับ