API Android 3.1

Cấp độ API: 12

Đối với nhà phát triển, nền tảng Android 3.1 (HONEYCOMB_MR1) có sẵn dưới dạng thành phần có thể tải xuống cho SDK Android. Nền tảng có thể tải xuống bao gồm thư viện Android và hình ảnh hệ thống, cũng như một tập hợp giao diện trình mô phỏng và khác. Nền tảng có thể tải xuống không chứa thư viện bên ngoài.

Đối với các nhà phát triển, nền tảng Android 3.1 được cung cấp dưới dạng thành phần có thể tải xuống cho SDK Android. Nền tảng có thể tải xuống bao gồm thư viện Android và hình ảnh hệ thống, cũng như một tập hợp giao diện trình mô phỏng và khác. Để bắt đầu phát triển hoặc thử nghiệm trên Android 3.1, sử dụng Trình quản lý SDK Android để tải nền tảng xuống SDK của bạn.

Tổng quan về API

Các phần dưới đây cung cấp thông tin tổng quan về kỹ thuật của những tính năng mới dành cho nhà phát triển trong Android 3.1, bao gồm các tính năng mới và thay đổi trong API khung kể từ phiên bản trước đó.

API USB

Android 3.1 giới thiệu các API mới mạnh mẽ cho tích hợp các thiết bị ngoại vi được kết nối với các ứng dụng chạy trên nền tảng. Các API này dựa trên ngăn xếp USB (Universal Serial Bus) và các dịch vụ được tích hợp vào nền tảng, bao gồm tính năng hỗ trợ cho cả thiết bị và máy chủ USB tương tác. Bằng cách sử dụng API, nhà phát triển có thể tạo ra các ứng dụng có thể khám phá, giao tiếp và quản lý nhiều loại thiết bị được kết nối qua USB.

Ngăn xếp và API phân biệt hai loại phần cứng USB cơ bản, dựa trên thiết bị chạy Android đang hoạt động như máy chủ lưu trữ hay phần cứng bên ngoài đang đóng vai trò là người tổ chức:

  • Thiết bị USB là một phần cứng được kết nối phụ thuộc vào Thiết bị chạy Android làm máy chủ lưu trữ. Ví dụ: hầu hết thiết bị đầu vào, chuột, và cần điều khiển là các thiết bị USB, cũng như nhiều máy ảnh, bộ chia, v.v.
  • Phụ kiện USB là một thiết bị phần cứng được kết nối có cổng USB bộ điều khiển của máy chủ, cung cấp năng lượng và được thiết kế để giao tiếp với Các thiết bị chạy Android qua USB, Nhiều thiết bị ngoại vi có thể kết nối dưới dạng phụ kiện, từ bộ điều khiển robot cho đến thiết bị âm nhạc, xe đạp tập thể dục, và nhiều lợi ích khác.

Đối với cả hai loại — thiết bị USB và phụ kiện USB — API USB của nền tảng hỗ trợ khám phá bằng thông báo truyền tin có ý định khi được đính kèm hoặc tách rời, cũng như các giao diện tiêu chuẩn, điểm cuối và chế độ chuyển (điều khiển, hàng loạt và gián đoạn).

API USB có trong gói android.hardware.usb. Chiến lược phát hành đĩa đơn lớp trung tâm là UsbManager, cung cấp các phương thức trợ giúp để xác định và giao tiếp với cả thiết bị USB và phụ kiện USB. Các ứng dụng có thể lấy một thực thể của UsbManager rồi truy vấn danh sách tệp đính kèm các thiết bị hoặc phụ kiện, sau đó giao tiếp với hoặc quản lý chúng. UsbManager cũng khai báo các thao tác theo ý định mà thông báo của hệ thống, để thông báo khi một phụ kiện hoặc thiết bị USB đã được cắm hoặc đã tách.

Các lớp khác bao gồm:

  • UsbDevice, một lớp đại diện cho bên ngoài phần cứng được kết nối dưới dạng thiết bị USB (với thiết bị chạy Android hoạt động như máy chủ lưu trữ).
  • UsbAccessory, đại diện cho phần cứng bên ngoài được kết nối dưới dạng USB host (với thiết bị chạy Android hoạt động như một USB thiết bị).
  • UsbInterfaceUsbEndpoint, cung cấp quyền truy cập vào USB tiêu chuẩn giao diện và điểm cuối cho một thiết bị.
  • UsbDeviceConnectionUsbRequest, để gửi và nhận dữ liệu và kiểm soát tin nhắn đến hoặc từ thiết bị USB, một cách đồng bộ và không đồng bộ.
  • UsbConstants, cung cấp các hằng số cho khai báo loại điểm cuối, lớp thiết bị, v.v.

Lưu ý rằng mặc dù ngăn xếp USB được tích hợp vào nền tảng, nhưng việc hỗ trợ thực tế đối với máy chủ USB và chế độ mở phụ kiện trên các thiết bị cụ thể được xác định bởi nhà sản xuất của họ. Cụ thể, chế độ máy chủ dựa vào USB thích hợp phần cứng của tay điều khiển trong thiết bị chạy Android.

Ngoài ra, nhà phát triển có thể yêu cầu lọc trên Google Play, sao cho các ứng dụng của họ không được cung cấp cho người dùng có thiết bị không cung cấp hỗ trợ USB thích hợp. Để yêu cầu lọc, hãy thêm một hoặc cả hai phần tử bên dưới vào tệp kê khai ứng dụng, nếu phù hợp:

  • Nếu ứng dụng chỉ hiển thị với các thiết bị hỗ trợ USB chế độ máy chủ lưu trữ (kết nối của thiết bị USB), hãy khai báo phần tử này:

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

  • Nếu ứng dụng chỉ hiển thị với các thiết bị hỗ trợ USB phụ kiện (kết nối của máy chủ USB), hãy khai báo phần tử này:

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

Để biết thông tin đầy đủ về cách phát triển các ứng dụng tương tác với phụ kiện USB, vui lòng xem tài liệu dành cho nhà phát triển.

Để xem các ứng dụng mẫu sử dụng API lưu trữ USB, hãy xem nội dung Kiểm tra ADBTên lửa Trình chạy

API MTP/PTP

Android 3.1 ra mắt API MTP mới cho phép các ứng dụng tương tác trực tiếp với camera được kết nối và các thiết bị PTP khác. API mới giúp người dùng để nhận thông báo khi thiết bị được gắn và tháo ra, quản lý các tệp và dung lượng lưu trữ trên các thiết bị đó, cũng như chuyển các tệp và siêu dữ liệu sang và từ họ. API MTP triển khai tập hợp con PTP (Giao thức truyền hình ảnh) về bản đặc tả MTP (Giao thức truyền nội dung nghe nhìn).

MTP API có trong gói android.mtp và cung cấp các lớp này:

  • MtpDevice đóng gói một thiết bị MTP được kết nối qua bus máy chủ USB. Một ứng dụng có thể tạo thực thể cho một đối tượng của loại này rồi sử dụng các phương thức để nhận thông tin về thiết bị và các đối tượng được lưu trữ trên đó, cũng như mở kết nối và chuyển dữ liệu. Có thể kể đến một số phương thức như sau:
    • getObjectHandles() trả về danh sách tên người dùng cho mọi đối tượng trên thiết bị khớp với định dạng và cấp độ gốc đã chỉ định. Để nhận thông tin về một đối tượng, ứng dụng có thể truyền tên người dùng đến getObjectInfo().
    • importFile() cho phép ứng dụng sao chép dữ liệu của đối tượng vào một tệp ở bên ngoài bộ nhớ. Cuộc gọi này có thể bị chặn trong một khoảng thời gian tuỳ ý tuỳ thuộc vào dữ liệu và tốc độ của thiết bị. Do đó, bạn nên lấy chuỗi.
    • open() cho phép ứng dụng mở thiết bị MTP/PTP được kết nối.
    • Trả lại hàng với mức phí getThumbnail() hình thu nhỏ của đối tượng dưới dạng một mảng byte.
  • MtpStorageInfo có thông tin về bộ nhớ trên thiết bị MTP, tương ứng với Tập dữ liệu StorageInfo được mô tả trong phần 5.2.2 của quy cách MTP. Các phương thức trong lớp này cho phép ứng dụng nhận chuỗi mô tả của thiết bị lưu trữ, dung lượng trống, dung lượng lưu trữ tối đa, mã bộ nhớ và mã nhận dạng ổ đĩa.
  • MtpDeviceInfo có thông tin về một thiết bị MTP tương ứng với Tập dữ liệu DeviceInfo được mô tả trong phần 5.1.1 của MTP đặc điểm kỹ thuật. Các phương thức trong lớp này cho phép ứng dụng lấy thông tin của thiết bị nhà sản xuất, kiểu máy, số sê-ri và phiên bản.
  • MtpObjectInfo chứa thông tin về một đối tượng được lưu trữ trên thiết bị MTP, tương ứng với Tập dữ liệu ObjectInfo được mô tả trong phần 5.3.1 của quy cách MTP. Các phương thức trong lớp này cho phép ứng dụng lấy kích thước đối tượng, định dạng dữ liệu, loại liên kết, ngày tạo và hình thu nhỏ của bạn.
  • MtpConstants cung cấp các hằng số để khai báo tệp MTP mã định dạng, loại liên kết và trạng thái bảo vệ.

Hỗ trợ các thiết bị đầu vào mới và sự kiện chuyển động

Android 3.1 mở rộng hệ thống con đầu vào để hỗ trợ các thiết bị đầu vào mới và các loại sự kiện chuyển động, trên tất cả các khung hiển thị và cửa sổ. Nhà phát triển có thể xây dựng ứng dụng dựa trên những khả năng này cho phép người dùng tương tác với ứng dụng của họ bằng chuột, bi xoay, cần điều khiển, bàn chơi và các thiết bị khác, ngoài bàn phím và màn hình cảm ứng.

Để xử lý phương thức nhập bằng chuột, con lăn chuột và bi xoay, nền tảng này hỗ trợ hai hành động sự kiện chuyển động mới:

  • ACTION_SCROLL, mô tả con trỏ vị trí nơi có chuyển động cuộn không chạm, chẳng hạn như từ con lăn chuột, đã diễn ra. Trong MotionEvent, giá trị của trục AXIS_HSCROLLAXIS_VSCROLL sẽ chỉ định thao tác cuộn tương đối chuyển động.
  • ACTION_HOVER_MOVE, báo cáo vấn đề hiện tại vị trí của chuột khi không có nút nào được nhấn, cũng như khi nút trung gian điểm kể từ sự kiện HOVER_MOVE gần đây nhất. Di chuột vào và thoát thông báo chưa được hỗ trợ.

Để hỗ trợ cần điều khiển và bàn chơi, lớp InputDevice bao gồm các nguồn thiết bị đầu vào mới sau:

Để mô tả sự kiện chuyển động từ các nguồn mới này, cũng như sự kiện từ chuột và bi xoay, nền tảng này hiện xác định các mã trục trên MotionEvent, tương tự như cách xác định mã phím trên KeyEvent. Mã trục mới cho cần điều khiển và tay điều khiển trò chơi bao gồm AXIS_HAT_X, AXIS_HAT_Y, AXIS_RTRIGGER, AXIS_ORIENTATION, AXIS_THROTTLE và nhiều người khác. Các trục MotionEvent hiện có được biểu thị bằng AXIS_X, AXIS_Y, AXIS_PRESSURE, AXIS_SIZE, AXIS_TOUCH_MAJOR, AXIS_TOUCH_MINOR, AXIS_TOOL_MAJOR, AXIS_TOOL_MINORAXIS_ORIENTATION.

Ngoài ra, MotionEvent xác định một số thuộc tính chung một số mã trục được dùng khi khung không biết cách liên kết một trục cụ thể. Các thiết bị cụ thể có thể sử dụng mã trục chung để truyền vào các ứng dụng. Để xem danh sách đầy đủ các trục và mục đích sử dụng chúng phiên dịch, hãy xem tài liệu về lớp MotionEvent.

Nền tảng này cung cấp hàng loạt sự kiện chuyển động cho các ứng dụng, do đó, một sự kiện có thể chứa một vị trí hiện tại và nhiều sự kiện được gọi là biến động lịch sử. Ứng dụng phải dùng getHistorySize() để tải số lượng mẫu trước đây, sau đó truy xuất và xử lý tất cả mẫu theo thứ tự bằng cách sử dụng getHistoricalAxisValue(). Sau đó, ứng dụng sẽ xử lý dữ liệu hiện tại mẫu bằng getAxisValue().

Một số trục có thể được truy xuất bằng các phương thức truy cập đặc biệt. Ví dụ: thay vì gọi getAxisValue(), các ứng dụng có thể gọi getX(). Các trục có trình truy cập tích hợp sẵn bao gồm AXIS_X, AXIS_Y, AXIS_PRESSURE, AXIS_SIZE, AXIS_TOUCH_MAJOR, AXIS_TOUCH_MINOR, AXIS_TOOL_MAJOR, AXIS_TOOL_MINORAXIS_ORIENTATION.

Mỗi thiết bị đầu vào có một mã nhận dạng duy nhất do hệ thống chỉ định và cũng có thể cung cấp từ nhiều nguồn. Khi thiết bị cung cấp nhiều nguồn, nhiều nguồn có thể cung cấp dữ liệu trục bằng cách sử dụng cùng một trục. Ví dụ: sự kiện chạm sắp diễn ra từ nguồn cảm ứng, sử dụng trục X cho dữ liệu vị trí trên màn hình, trong khi cần điều khiển sự kiện đến từ nguồn của cần điều khiển sẽ sử dụng trục X làm vị trí cần điều khiển thay thế. Vì lý do này, điều quan trọng là các ứng dụng phải diễn giải trục giá trị theo nguồn gốc của giá trị đó. Khi xử lý một chuyển động sự kiện, các ứng dụng sẽ sử dụng các phương thức trên InputDevice để xác định các trục mà một thiết bị hoặc nguồn hỗ trợ. Cụ thể, các ứng dụng đều có thể sử dụng getMotionRanges() để truy vấn tất cả các trục của một thiết bị hoặc tất cả các trục của một thiết bị cụ thể nguồn của thiết bị. Trong cả hai trường hợp, thông tin về phạm vi cho các trục được trả về trong đối tượng InputDevice.MotionRange chỉ định nguồn cho từng giá trị trục.

Cuối cùng, vì các sự kiện chuyển động từ cần điều khiển, bàn chơi, chuột và bi xoay không phải là sự kiện chạm, nền tảng thêm một phương thức gọi lại mới cho chuyển chúng đến View dưới dạng "chung" sự kiện chuyển động. Cụ thể, công cụ này báo cáo các sự kiện chuyển động không chạm cho View thông qua lệnh gọi đến onGenericMotionEvent() thay vì đến onTouchEvent().

Nền tảng này gửi các sự kiện chuyển động chung theo cách khác nhau, tuỳ thuộc vào lớp nguồn sự kiện. SOURCE_CLASS_POINTER sự kiện chuyển đến View bên dưới con trỏ, tương tự như cách chạm các sự kiện hoạt động. Tất cả những người khác sẽ chuyển đến View hiện được đặt tiêu điểm. Ví dụ: điều này có nghĩa là View phải lấy tiêu điểm để nhận các sự kiện cần điều khiển. Nếu cần, ứng dụng có thể xử lý những sự kiện này tại cấp Hoạt động hoặc Hộp thoại bằng cách triển khai onGenericMotionEvent() ở đó.

Để xem một ứng dụng mẫu sử dụng chuyển động của cần điều khiển các sự kiện, hãy xem GameControllerInputGameView.

API RTP

Android 3.1 hiển thị API cho RTP (Giao thức truyền tải theo thời gian thực) được tích hợp sẵn mà các ứng dụng có thể dùng để quản lý dữ liệu theo yêu cầu hoặc dữ liệu tương tác phát trực tuyến. Cụ thể, các ứng dụng cung cấp VOIP, kỹ thuật đẩy để nói chuyện, hội nghị truyền hình, và tính năng phát trực tuyến âm thanh có thể dùng API để khởi tạo các phiên hoạt động và truyền hoặc nhận qua bất kỳ mạng nào có sẵn.

API RTP có trong gói android.net.rtp. Hạng bao gồm:

  • RtpStream, lớp cơ sở của luồng gửi và nhận các gói mạng có tải trọng truyền thông qua RTP.
  • AudioStream, một lớp con của RtpStream mang tải trọng âm thanh qua RTP.
  • AudioGroup, một trung tâm âm thanh cục bộ để quản lý và đang trộn loa, micrô và AudioStream của thiết bị.
  • AudioCodec, chứa một tập hợp các bộ mã hoá và giải mã mà bạn xác định cho một AudioStream.

Để hỗ trợ hội nghị truyền thanh và các trường hợp sử dụng tương tự, một ứng dụng sẽ tạo thực thể hai lớp làm điểm cuối cho luồng:

  • AudioStream chỉ định một điểm cuối từ xa và bao gồm của ánh xạ mạng và AudioCodec đã định cấu hình.
  • AudioGroup đại diện cho điểm cuối cục bộ của một hoặc nhiều AudioStream hơn. Danh sách kết hợp AudioGroup tất cả các AudioStream và tương tác với thiết bị (không bắt buộc) và micrô cùng lúc.

Cách sử dụng đơn giản nhất liên quan đến một điểm cuối từ xa và điểm cuối cục bộ. Đối với những trường hợp sử dụng phức tạp hơn, vui lòng tham khảo các giới hạn được mô tả cho AudioGroup.

Để sử dụng RTP API, ứng dụng phải yêu cầu người dùng cấp quyền bằng cách khai báo <uses-permission android:name="android.permission.INTERNET"> trong tệp kê khai. Để sử dụng micrô của thiết bị, bạn cũng cần có quyền <uses-permission android:name="android.permission.RECORD_AUDIO">.

Tiện ích ứng dụng có thể thay đổi kích thước

Kể từ Android 3.1, nhà phát triển có thể tạo tiện ích trên màn hình chính có thể đổi kích thước — theo chiều ngang, chiều dọc hoặc trên cả hai trục. Người dùng chạm và giữ tiện ích con để hiển thị ô điều khiển thay đổi kích thước, sau đó kéo ngang và/hoặc dọc ô điều khiển để thay đổi kích thước trên lưới bố cục.

Nhà phát triển có thể đổi kích thước bất kỳ tiện ích nào trên Màn hình chính bằng cách xác định Thuộc tính resizeMode trong siêu dữ liệu AppWidgetProviderInfo của tiện ích. Giá trị cho thuộc tính Thuộc tính resizeMode bao gồm "ngang", "dọc" và "không có". Để khai báo một tiện ích là có thể đổi kích thước theo chiều ngang và chiều dọc, hãy cung cấp giá trị "ngang|dọc".

Ví dụ:

<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>

Để biết thêm thông tin về các tiện ích trên Màn hình chính, hãy xem phần Tiện ích ứng dụng tài liệu.

Khung ảnh động

  • Lớp ViewPropertyAnimator mới
    • Lớp ViewPropertyAnimator mới cung cấp thuận tiện để nhà phát triển tạo ảnh động cho các thuộc tính chọn lọc trên đối tượng View. Lớp tự động và tối ưu hoá ảnh động của các thuộc tính, đồng thời giúp bạn dễ dàng quản lý nhiều ảnh động đồng thời trên đối tượng View.

      Việc sử dụng ViewPropertyAnimator rất đơn giản. Cách tạo ảnh động cho các thuộc tính cho View, hãy gọi animate() đến tạo đối tượng ViewPropertyAnimator cho View đó. Sử dụng trên ViewPropertyAnimator để chỉ định thuộc tính nào cần tạo ảnh động và cách tạo ảnh động. Ví dụ: để làm mờ View thành trong suốt, gọi alpha(0);. Đối tượng ViewPropertyAnimator xử lý thông tin chi tiết về việc định cấu hình lớp Animator cơ bản và khởi động lớp đó, sau đó kết xuất ảnh động.

  • Màu nền ảnh động
    • getBackgroundColor() mới và Các phương thức setBackgroundColor(int) cho phép bạn tải/đặt màu nền phía sau ảnh động, cho ảnh động cửa sổ . Hiện tại, nền phải là màu đen, với bất kỳ mức độ alpha mong muốn nào.
  • Lấy phân số động từ ViewAnimator
    • Một getAnimatedFraction() mới phương thức cho phép bạn nhận tỷ lệ ảnh động hiện tại — tỷ lệ đã trôi qua/nội suy phân đoạn được dùng trong lần cập nhật khung hình gần đây nhất – từ ValueAnimator.

khung giao diện người dùng

  • Buộc kết xuất một lớp
    • Phương thức buildLayer() mới cho phép ứng dụng buộc tạo lớp của Chế độ xem và Chế độ xem kết xuất vào lớp đó ngay lập tức. Ví dụ: một ứng dụng có thể dùng phương thức này để kết xuất một Thành phần hiển thị vào trước khi bắt đầu ảnh động. Nếu Khung hiển thị phức tạp, hãy kết xuất nó thành trước khi bắt đầu ảnh động sẽ tránh bỏ qua khung hình.
  • Khoảng cách camera
    • Ứng dụng có thể dùng một phương thức mới setCameraDistance(float) để đặt khoảng cách từ máy ảnh vào một Chế độ xem. Điều này giúp ứng dụng kiểm soát tốt hơn việc chuyển đổi 3D Chế độ xem, chẳng hạn như xoay.
  • Tải chế độ xem lịch từ DatePicker
  • Nhận lệnh gọi lại khi khung hiển thị được tách
  • Trình nghe breadcrumb Fragment, chữ ký onInflate() mới
  • Hiện kết quả tìm kiếm trong thẻ mới
    • Khoá dữ liệu EXTRA_NEW_SEARCH cho ý định ACTION_WEB_SEARCH cho phép bạn mở một lượt tìm kiếm trong thẻ trình duyệt mới thay vì trong thẻ trình duyệt hiện có.
  • Con trỏ văn bản có thể vẽ
    • Giờ đây, bạn có thể chỉ định một đối tượng có thể vẽ để dùng làm con trỏ văn bản bằng cách sử dụng thuộc tính tài nguyên textCursorDrawable.
  • Chế độ cài đặt thành phần con đang hiển thị trong khung hiển thị từ xa
  • Khoá chung cho tay điều khiển trò chơi và các thiết bị đầu vào khác
    • KeyEvent thêm một loạt các mã phím chung cho phù hợp với các nút trên tay điều khiển trò chơi. Lớp học này cũng thêm isGamepadButton(int) và một vài ứng dụng khác các phương thức trợ giúp để làm việc với mã phím.

Đồ hoạ

  • Trình trợ giúp để quản lý bitmap
    • setHasAlpha(boolean) cho phép một ứng dụng cho biết rằng tất cả các pixel trong Bitmap được biết là mờ (false) hoặc một số pixel có thể chứa giá trị alpha không mờ (true). Lưu ý: đối với một số cấu hình (chẳng hạn như vì RGB_565), nên lệnh gọi này sẽ bị bỏ qua vì không hỗ trợ alpha trên mỗi pixel giá trị. Đây là gợi ý vẽ, như trong một số trường hợp, bitmap đã biết trường hợp vẽ mờ có thể mất trường hợp vẽ nhanh hơn trường hợp có thể có trường hợp không mờ giá trị alpha trên mỗi pixel.
    • getByteCount() nhận kích thước của Bitmap trong byte.
    • getGenerationId() cho phép một ứng dụng tìm xác định xem Bitmap đã được sửa đổi hay chưa, chẳng hạn như để lưu vào bộ nhớ đệm.
    • sameAs(android.graphics.Bitmap) xác định liệu một Bitmap cụ thể có khác với Bitmap hiện tại hay không về kích thước, hoặc dữ liệu pixel.
  • Đặt vị trí và chế độ xoay của máy ảnh
    • Camera thêm hai phương thức mới là rotate()setLocation() cho quyền kiểm soát vị trí của camera để chuyển đổi 3D.

Mạng

  • Khoá Wi-Fi hiệu suất cao
    • Một khoá Wi-Fi hiệu suất cao mới giúp các ứng dụng duy trì kết nối Wi-Fi hiệu suất cao ngay cả khi màn hình thiết bị đang tắt. Các ứng dụng phát trực tuyến nhạc, video hoặc giọng nói trong thời gian dài có thể bị khoá Wi-Fi hiệu suất cao để đảm bảo hiệu suất phát trực tuyến ngay cả khi màn hình đã bị tắt. Vì sử dụng nhiều năng lượng hơn, các ứng dụng phải nhận được Wi-Fi hiệu suất cao khi cần một thiết bị hoạt động trong thời gian dài kết nối.

      Để tạo khoá hiệu suất cao, hãy truyền WIFI_MODE_FULL_HIGH_PERF dưới dạng chế độ khoá trong một gọi đến createWifiLock().

  • Thống kê lưu lượng truy cập khác
    • Các ứng dụng hiện có thể truy cập số liệu thống kê về nhiều loại sử dụng mạng hơn bằng các phương thức mới trong TrafficStats. Ứng dụng có thể sử dụng để thu thập số liệu thống kê UDP, số gói, byte truyền/nhận TCP và cho một UID nhất định.
  • Tên người dùng xác thực SIP
    • Giờ đây, các ứng dụng có thể nhận và đặt tên người dùng xác thực SIP cho một hồ sơ đang sử dụng các phương thức mới getAuthUserName()setAuthUserName().

Trình quản lý Tải xuống

  • Xử lý các lượt tải xuống đã hoàn tất
    • Các ứng dụng giờ đây có thể bắt đầu tải xuống để chỉ thông báo cho người dùng trên hoàn thành. Để bắt đầu hình thức tải xuống này, các ứng dụng phải vượt qua VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION trong phương thức setNotificationVisibility() của đối tượng yêu cầu.
    • Phương thức mới addCompletedDownload() cho phép ứng dụng thêm một tệp vào tải xuống cơ sở dữ liệu để có thể được quản lý bằng ứng dụng Tải xuống.
  • Hiện các tệp đã tải xuống được sắp xếp theo kích thước

khung IME

  • Lấy khoá giá trị bổ sung của phương thức nhập

Nội dung nghe nhìn

  • Các định dạng mới cho âm thanh phát trực tuyến
    • Khung nội dung đa phương tiện bổ sung tính năng hỗ trợ tích hợp sẵn cho nội dung ADTS AAC thô, đối với cải thiện âm thanh phát trực tuyến, cũng như hỗ trợ âm thanh FLAC, để có chất lượng cao nhất Nội dung âm thanh nén (không mất dữ liệu). Xem Định dạng nội dung nghe nhìn được hỗ trợ để biết thêm thông tin.

Đã dừng bật các chế độ điều khiển khởi chạy ứng dụng

Bắt đầu từ Android 3.1, trình quản lý gói của hệ thống theo dõi các ứng dụng ở trạng thái dừng và cung cấp phương tiện kiểm soát khởi chạy từ các quy trình nền và ứng dụng khác.

Lưu ý rằng trạng thái dừng của một ứng dụng không giống với trạng thái của một Hoạt động trạng thái đã dừng. Hệ thống sẽ quản lý riêng biệt 2 trạng thái dừng đó.

Nền tảng này xác định 2 cờ ý định mới cho phép người gửi chỉ định liệu Ý định có được phép kích hoạt các thành phần trong đã dừng hay không .

  • FLAG_INCLUDE_STOPPED_PACKAGES – Bao gồm bộ lọc ý định của các ứng dụng đã dừng vào danh sách các mục tiêu tiềm năng để giải quyết.
  • FLAG_EXCLUDE_STOPPED_PACKAGES – Loại trừ bộ lọc ý định của các ứng dụng đã dừng khỏi danh sách các ứng dụng tiềm năng mục tiêu.

Khi không có hoặc cả hai cờ này được xác định trong một ý định, giá trị mặc định hành vi là đưa các bộ lọc của các ứng dụng đã dừng vào danh sách các mục tiêu tiềm năng.

Lưu ý rằng hệ thống sẽ thêm FLAG_EXCLUDE_STOPPED_PACKAGES vào tất cả thông báo truyền tin ý định. Lệnh này thực hiện việc này để ngăn các thông báo truyền phát từ các dịch vụ nền từ vô tình khởi chạy hoặc không cần thiết các thành phần của ứng dụng bị dừng. Dịch vụ nền hoặc ứng dụng có thể ghi đè hành vi này bằng cách thêm phương thức Cờ FLAG_INCLUDE_STOPPED_PACKAGES để truyền tin ý định được phép kích hoạt các ứng dụng đã dừng.

Ứng dụng sẽ ở trạng thái dừng khi được cài đặt lần đầu nhưng không chưa khởi chạy và khi chúng bị người dùng dừng theo cách thủ công (trong phần Quản lý Ứng dụng).

Thông báo về việc khởi chạy và nâng cấp ứng dụng lần đầu tiên

Nền tảng này bổ sung thông báo cải tiến về lần khởi chạy ứng dụng lần đầu và nâng cấp thông qua hai thao tác theo ý định mới:

  • ACTION_PACKAGE_FIRST_LAUNCH — Đã gửi tới gói trình cài đặt của ứng dụng khi ứng dụng đó được khởi chạy lần đầu tiên (tức là lần đầu tiên thiết bị bị chuyển ra khỏi trạng thái dừng). Dữ liệu chứa tên của gói.
  • ACTION_MY_PACKAGE_REPLACED — Thông báo một ứng dụng đã được cập nhật, với một phiên bản mới được cài đặt qua phiên bản hiện có. Thông tin này chỉ được gửi đến ứng dụng đã được thay thế. Nó không chứa bất kỳ dữ liệu bổ sung nào. Để nhận ý định, hãy khai báo bộ lọc ý định cho hành động này. Bạn có thể sử dụng ý định để kích hoạt mã giúp ứng dụng của bạn trở lại hình dạng đang chạy thích hợp sau khi nâng cấp.

    Ý định này được gửi trực tiếp đến ứng dụng, nhưng chỉ khi ứng dụng đã được nâng cấp khi ở trạng thái đã bắt đầu (không ở trạng thái đã dừng).

Phần mềm tiện ích cốt lõi

  • Bộ nhớ đệm LRU
    • Lớp LruCache mới cho phép các ứng dụng của bạn hưởng lợi nhờ việc lưu vào bộ nhớ đệm một cách hiệu quả. Các ứng dụng có thể dùng lớp này để giảm thời gian sử dụng tính toán hoặc tải dữ liệu xuống từ mạng, trong khi vẫn duy trì tính hợp lý mức sử dụng bộ nhớ cho dữ liệu được lưu vào bộ nhớ đệm.LruCache là bộ nhớ đệm có tham chiếu mạnh đến một số lượng giới hạn các giá trị. Mỗi khi một giá trị được được truy cập thì mục đó sẽ được chuyển đến đầu hàng đợi. Khi một giá trị được thêm vào thẻ bộ nhớ đệm, thì giá trị ở cuối hàng đợi đó sẽ bị loại bỏ và có thể đủ điều kiện thu gom rác.
  • Chỉ số mô tả tệp là int

WebKit

  • Cookie lược đồ tệp
    • CookieManager hiện hỗ trợ các cookie sử dụng thời gian Giao thức URI file:. Bạn có thể sử dụng setAcceptFileSchemeCookies() để bật/tắt tính năng hỗ trợ cho cookie lược đồ tệp trước khi tạo một thực thể trong số WebView hoặc CookieManager. Trong một CookieManager, bạn có thể kiểm tra xem có cookie lược đồ tệp hay không được bật bằng cách gọi allowFileSchemeCookies().
  • Thông báo về yêu cầu đăng nhập
    • Để hỗ trợ các tính năng tự động đăng nhập vào trình duyệt được giới thiệu trong Android 3.0, hồ sơ thanh toán phương thức onReceivedLoginRequest() thông báo cho máy chủ ứng dụng mà yêu cầu tự động đăng nhập cho người dùng đã được xử lý.
  • Đã xoá lớp và giao diện
    • Một số lớp và giao diện đã bị xoá khỏi API công khai, sau khi trước đó ở trạng thái không được dùng nữa. Xem API Báo cáo sự khác biệt để biết thêm thông tin.

Trình duyệt

Ứng dụng Trình duyệt thêm các tính năng sau để hỗ trợ web ứng dụng:

  • Hỗ trợ phát lại cùng dòng video được nhúng trong HTML5 Thẻ <video>. Quá trình phát được tăng tốc phần cứng nếu có thể.
  • Hỗ trợ lớp cho các phần tử vị trí cố định cho tất cả các trang web (thiết bị di động và máy tính để bàn).

Hằng số tính năng mới

Nền tảng này sẽ thêm các hằng số mới của tính năng phần cứng mà nhà phát triển có thể khai báo trong tệp kê khai ứng dụng của chúng, để thông báo cho các pháp nhân bên ngoài như Google Phát yêu cầu của ứng dụng về các tính năng phần cứng mới được hỗ trợ trong phiên bản này của nền tảng. Nhà phát triển khai báo các tính năng này và các tính năng khác hằng số trong phần tử tệp kê khai <uses-feature>.

  • android.hardware.usb.accessory — Ứng dụng sử dụng USB API để giao tiếp với các thiết bị phần cứng bên ngoài kết nối qua USB và hoạt động dưới dạng máy chủ.
  • android.hardware.usb.host – Ứng dụng sử dụng USB API để giao tiếp với các thiết bị phần cứng bên ngoài được kết nối qua USB và hoạt động như thiết bị.

Google Play lọc các ứng dụng dựa trên các tính năng được khai báo trong phần tử tệp kê khai <uses-feature>. Để biết thêm thông tin về khai báo tính năng trong tệp kê khai ứng dụng, hãy đọc Google Play Bộ lọc.

Báo cáo khác biệt về API

Để xem chi tiết tất cả thay đổi đối với API trong Android 3.1 (API Cấp độ 12), hãy xem API Báo cáo điểm khác biệt.

Cấp độ API:

Nền tảng Android 3.1 cung cấp phiên bản cập nhật của API khung. API Android 3.1 được gán một mã nhận dạng bằng số nguyên — 12 — tức là được lưu trữ trong chính hệ thống. Giá trị nhận dạng này, được gọi là "Cấp độ API", cho phép để xác định chính xác xem một ứng dụng có tương thích với hệ thống trước khi cài đặt ứng dụng.

Để sử dụng các API được giới thiệu trong Android 3.1 trong ứng dụng của bạn, bạn cần biên dịch ứng dụng dựa trên thư viện Android được cung cấp trong nền tảng SDK Android 3.1. Tuỳ thuộc vào nhu cầu, bạn nên có thể bạn cũng cần thêm một android:minSdkVersion="12" cho phần tử <uses-sdk> trong đơn đăng ký tệp kê khai.

Để biết thêm thông tin, hãy đọc bài viết API là gì Cấp độ?