API Android 3.1

Cấp độ API: 12

Đối với các nhà phát triển, nền tảng Android 3.1 (HONEYCOMB_MR1) có sẵn dưới dạng một 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 bộ giao diện trình mô phỏng và nhiều nội dung khác. Nền tảng có thể tải xuống không có 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ó sẵn dưới dạng một 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 bộ giao diện trình mô phỏng và nhiều nội dung khác. Để bắt đầu phát triển hoặc kiểm thử trên Android 3.1, hãy sử dụng Trình quản lý SDK Android để tải nền tảng này xuống SDK của bạn.

Tổng quan về API

Các phần dưới đây cung cấp tổng quan kỹ thuật về các 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ẽ để tích hợp các thiết bị ngoại vi đã kết nối với các ứng dụng chạy trên nền tảng này. 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ả hoạt động tương tác của thiết bị và máy chủ USB. Bằng cách sử dụng các API, nhà phát triển có thể tạo các ứng dụng có khả năng 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 vào việc thiết bị chạy Android đang đóng vai trò là máy chủ hay phần cứng bên ngoài đóng vai trò là máy chủ:

  • 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 để đóng vai trò là máy chủ lưu trữ. Ví dụ: hầu hết các thiết bị đầu vào, chuột và cần điều khiển đều là thiết bị USB, cũng như nhiều máy ảnh, bộ trung tâm, v.v.
  • Phụ kiện USB là một phần cứng được kết nối có bộ điều khiển máy chủ USB, cung cấp nguồn điện 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.v.

Đối với cả hai loại – thiết bị USB và phụ kiện USB – API USB của nền tảng đều hỗ trợ phát hiện theo thông báo truyền tin theo ý đị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ế độ truyền (kiểm soát, hàng loạt và gián đoạn).

Các API USB có trong gói android.hardware.usb. 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, sau đó truy vấn danh sách các thiết bị hoặc phụ kiện đính kèm, sau đó giao tiếp hoặc quản lý các thiết bị/phụ kiện đó. UsbManager cũng khai báo các thao tác theo ý định mà hệ thống truyền đi để thông báo khi một thiết bị USB hoặc phụ kiện được kết nối hoặc tách rời.

Các hạng khác bao gồm:

  • UsbDevice, một lớp đại diện cho phần cứng bên ngoài được kết nối dưới dạng thiết bị USB (trong đó thiết bị chạy Android đóng vai trò là máy chủ).
  • UsbAccessory, biểu thị cho phần cứng bên ngoài được kết nối dưới dạng máy chủ USB (trong đó thiết bị chạy Android hoạt động như một thiết bị USB).
  • UsbInterfaceUsbEndpoint, cung cấp quyền truy cập vào các giao diện và điểm cuối USB tiêu chuẩn cho một thiết bị.
  • UsbDeviceConnectionUsbRequest, để gửi và nhận dữ liệu cũng như điều khiển thông báo tới 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ố để khai báo loại điểm cuối, lớp thiết bị, v.v.

Xin lưu ý rằng mặc dù ngăn xếp USB được tích hợp vào nền tảng này, nhưng nhà sản xuất sẽ quyết định khả năng hỗ trợ thực tế cho máy chủ USB và các chế độ phụ kiện mở trên những thiết bị cụ thể. Cụ thể, chế độ lưu trữ dựa vào phần cứng bộ điều khiển USB thích hợp 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, theo đó ứng dụng của họ sẽ không được cung cấp cho những người dùng có thiết bị không 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 thích hợp:

  • Nếu ứng dụng chỉ hiển thị với các thiết bị hỗ trợ chế độ lưu trữ USB (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ợ phụ kiện USB (kết nối 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 phần Kiểm thử ADBTrình chạy tên lửa

API MTP/PTP

Android 3.1 hiển thị một API MTP mới cho phép các ứng dụng tương tác trực tiếp với máy ảnh đã kết nối và các thiết bị PTP khác. API mới này giúp ứng dụng dễ dàng nhận thông báo khi thiết bị được đính kèm và xoá, quản lý tệp và dung lượng lưu trữ trên các thiết bị đó, cũng như chuyển tệp và siêu dữ liệu qua lại. API MTP triển khai tập hợp con PTP (Giao thức truyền hình ảnh) trong thông số kỹ thuật MTP (Giao thức truyền nội dung nghe nhìn).

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

  • 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 thuộc loại này rồi sử dụng các phương thức để lấy thông tin về thiết bị và các đối tượng được lưu trữ trên thiết bị đó, cũng như mở kết nối và truyền dữ liệu. Sau đây là một số phương thức:
    • getObjectHandles() trả về danh sách tay điều khiển cho mọi đối tượng trên thiết bị khớp với định dạng và thành phần mẹ đã chỉ định. Để nhận thông tin về một đối tượng, ứng dụng có thể truyền một handle đến getObjectInfo().
    • importFile() cho phép ứng dụng sao chép dữ liệu của một đối tượng vào tệp trong bộ nhớ ngoài. Lệnh gọi này có thể chặn trong một khoảng thời gian tuỳ ý tuỳ thuộc vào kích thước dữ liệu và tốc độ của thiết bị. Vì vậy, bạn nên thực hiện lệnh gọi này qua một luồng có lệnh spearate.
    • open() cho phép ứng dụng mở thiết bị MTP/PTP được kết nối.
    • getThumbnail() trả về hình thu nhỏ của đối tượng dưới dạng một mảng byte.
  • MtpStorageInfo chứa thông tin về đơn vị lưu trữ 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 thông số kỹ thuật MTP. Các phương thức trong lớp cho phép ứng dụng nhận chuỗi mô tả, dung lượng trống, dung lượng lưu trữ tối đa, mã bộ nhớ và giá trị nhận dạng ổ đĩa của đơn vị lưu trữ.
  • MtpDeviceInfo lưu giữ 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 mục 5.1.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 thông tin về nhà sản xuất, kiểu máy, số sê-ri và phiên bản của thiết bị.
  • 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 mục 5.3.1 của thông số kỹ thuật MTP. Các phương thức trong lớp này cho phép ứng dụng lấy kích thước, định dạng dữ liệu, kiểu liên kết, ngày tạo và thông tin về hình thu nhỏ của một đối tượng.
  • MtpConstants cung cấp các hằng số để khai báo mã định dạng tệp MTP, 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 đầu vào phụ để hỗ trợ các thiết bị đầu vào mới và các loại sự kiện chuyển động mới, trên mọi khung hiển thị và cửa sổ. Nhà phát triển có thể xây dựng dựa trên các tính 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, tay điều khiển trò 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 và bi xoay, nền tảng hỗ trợ 2 hành động sự kiện chuyển động mới:

  • ACTION_SCROLL (mô tả vị trí con trỏ mà tại đó một 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 chỉ định di chuyển cuộn tương đối.
  • ACTION_HOVER_MOVE, báo cáo vị trí hiện tại của chuột khi không nhấn nút nào, cũng như mọi điểm trung gian kể từ sự kiện HOVER_MOVE gần đây nhất. Di chuột để nhập và thoát thông báo chưa được hỗ trợ.

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

Để mô tả các sự kiện chuyển động từ các nguồn mới này, cũng như các sự kiện từ chuột và bi xoay, nền tảng này hiện xác định mã trục trên MotionEvent, tương tự như cách xác định mã khoá trên KeyEvent. Các 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 mã 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ố mã trục chung đượ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ể dùng mã trục chung để truyền dữ liệu chuyển động tuỳ chỉnh đến các ứng dụng. Để biết danh sách đầy đủ các trục và cách diễn giải dự kiến, 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, vì vậy, một sự kiện duy nhất có thể chứa vị trí hiện tại và nhiều sự kiện được gọi là chuyển động trong quá khứ. Các ứng dụng nên sử dụng getHistorySize() để lấy số lượng mẫu trước đây, sau đó truy xuất và xử lý tất cả mẫu trước đây theo thứ tự bằng getHistoricalAxisValue(). Sau đó, các ứng dụng sẽ xử lý mẫu hiện tại 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 nhiều nguồn. Khi một 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ụ: một sự kiện chạm đến từ nguồn cảm ứng sẽ sử dụng trục X cho dữ liệu vị trí màn hình, trong khi một sự kiện cần điều khiển đến từ nguồn cần điều khiển sẽ sử dụng trục X cho vị trí cần điều khiển. Vì lý do này, các ứng dụng cần phải diễn giải các giá trị trục theo nguồn gốc của các giá trị đó. Khi xử lý một sự kiện chuyển động, các ứng dụng phải sử dụng các phương thức trên lớp 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 có thể sử dụng getMotionRanges() để truy vấn tất cả các trục của thiết bị hoặc tất cả các trục của một nguồn thiết bị nhất định. Trong cả hai trường hợp, thông tin phạm vi của các trục được trả về trong đối tượng InputDevice.MotionRange sẽ 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, tay điều khiển trò chơi, chuột và bi xoay không phải là sự kiện chạm, nên nền tảng này sẽ thêm phương thức gọi lại mới để truyền các sự kiện đó đến View dưới dạng sự kiện chuyển động "chung". 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 sẽ 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. Các sự kiện SOURCE_CLASS_POINTER chuyển đến View bên dưới con trỏ, tương tự như cách hoạt động của sự kiện chạm. Tất cả những tệp khác sẽ chuyển đến View hiện được lấy làm 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á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 ở 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 các sự kiện chuyển động của cần điều khiển, hãy xem GameControllerInputGameView.

API RTP

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

API RTP có trong gói android.net.rtp. Các lớp bao gồm:

  • RtpStream, lớp cơ sở của luồng gửi và nhận gói mạng có tải trọng nội dung nghe nhìn qua RTP.
  • AudioStream, một lớp con của RtpStream truyền tải trọng âm thanh qua RTP.
  • AudioGroup, một trung tâm âm thanh cục bộ để quản lý và phối 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ợ tính năng hội nghị truyền thanh và các mục đích sử dụng tương tự, ứng dụng sẽ tạo thực thể cho 2 lớp làm điểm cuối cho quá trình truyền trực tuyến:

  • AudioStream chỉ định một điểm cuối từ xa và bao gồm liên kết mạng và một 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. AudioGroup kết hợp tất cả các AudioStream và tương tác cùng lúc với loa và micrô của thiết bị (không bắt buộc).

Cách sử dụng đơn giản nhất liên quan đến một điểm cuối từ xa và một điểm cuối cục bộ. Đối với các 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 API RTP, các ứ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. Để lấy 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ể đổi kích thước tiện ích trên màn hình chính – theo chiều ngang, chiều dọc hoặc trên cả hai trục. Người dùng chạm và giữ một tiện ích để hiện ô điều khiển đổi kích thước, sau đó kéo các ô điều khiển ngang và/hoặc dọc để 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 Màn hình chính nào 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ị của 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ị "landscape|vertical".

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 tài liệu về Tiện ích ứng dụng.

Khung ảnh động

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

      Cách sử dụng ViewPropertyAnimator rất đơn giản. Để tạo ảnh động cho các thuộc tính cho View, hãy gọi animate() để tạo đối tượng ViewPropertyAnimator cho View đó. Sử dụng các phương thức trên ViewPropertyAnimator để chỉ định thuộc tính nào sẽ tạo ảnh động và cách tạo ảnh động cho thuộc tính đó. Ví dụ: để làm mờ View thành trong suốt, hãy gọi alpha(0);. Đối tượng ViewPropertyAnimator xử lý thông tin chi tiết về cách đị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
    • Phương thức getBackgroundColor()setBackgroundColor(int) mới cho phép bạn lấy/đặt màu nền phía sau ảnh động, chỉ dành cho ảnh động cửa sổ. Hiện tại, nền phải là màu đen, với bất kỳ cấp độ alpha mong muốn nào.
  • Lấy ảnh động phân số từ ViewAnimator
    • Phương thức getAnimatedFraction() mới cho phép bạn lấy phần ảnh động hiện tại – phân đoạn đã trôi qua/nội suy đượ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 Thành phần hiển thị và kết xuất lớp đó ngay lập tức. Ví dụ: một ứng dụng có thể sử dụng phương thức này để kết xuất thành phần hiển thị vào lớp của nó trước khi bắt đầu ảnh động. Nếu Khung hiển thị phức tạp, việc kết xuất khung hiển thị vào lớp trước khi bắt đầu ảnh động sẽ tránh bỏ qua khung hình.
  • Khoảng cách chụp
    • Các ứng dụng có thể dùng phương thức mới setCameraDistance(float) để đặt khoảng cách từ máy ảnh đến một Chế độ xem. Điều này giúp ứng dụng cải thiện khả năng kiểm soát đối với các phép biến đổi 3D của Khung hiển thị, chẳng hạn như các chế độ xoay.
  • Tải chế độ xem lịch qua DatePicker
  • Nhận lệnh gọi lại khi khung hiển thị bị tách rời
  • Trình nghe breadcrumb của mảnh, chữ ký onInflate() mới
  • Hiển thị 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ở nội dung tìm kiếm trong một thẻ trình duyệt mới thay vì trong thẻ 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 mới textCursorDrawable.
  • Chế độ cài đặt cấp độ con được hiển thị trong chế độ xem từ xa
  • Các 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 để phù hợp với các nút trên tay điều khiển trò chơi. Lớp này cũng thêm isGamepadButton(int) và một số phương thức trợ giúp khác để xử lý mã phím.

Đồ hoạ

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

Mạng

  • Khoá Wi-Fi hiệu suất cao
    • Khoá Wi-Fi hiệu suất cao mới cho phé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ị 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ể có được khoá Wi-Fi hiệu suất cao để đảm bảo hiệu suất truyền trực tuyến ngay cả khi màn hình tắt. Vì nó sử dụng nhiều điện năng hơn nên các ứng dụng cần có được Wi-Fi hiệu suất cao khi cần một kết nối hoạt động lâu dài.

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

  • Số liệu thống kê khác về lưu lượng truy cập
    • Giờ đây, các ứng dụng có thể truy cập số liệu thống kê về nhiều kiểu sử dụng mạng hơn bằng cách sử dụng các phương thức mới trong TrafficStats. Ứng dụng có thể dùng các phương thức để lấy số liệu thống kê UDP, số lượng gói, TCP truyền/nhận các byte tải trọng và phân đoạn 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 hồ sơ bằng các phương thức mới getAuthUserName()setAuthUserName().

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

  • Xử lý các mục tải xuống đã hoàn tất
    • Giờ đây, các ứng dụng có thể bắt đầu tải xuống mà chỉ thông báo cho người dùng khi hoàn tất. Để bắt đầu loại quá trình tải xuống này, các ứng dụng sẽ truyền VISIBILITY_VISIBLE_NOTIFY_ONLY_COMPLETION vào phương thức setNotificationVisibility() của đối tượng yêu cầu.
    • Một phương thức mới, addCompletedDownload(), cho phép ứng dụng thêm tệp vào cơ sở dữ liệu tải xuống để ứng dụng Tệp đã tải xuống có thể quản lý tệp đó.
  • Hiện nội dung 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 thanh phát trực tuyến mới
    • Khung nội dung đa phương tiện bổ sung tính năng hỗ trợ tích hợp cho nội dung ADTS AAC thô, để cải thiện âm thanh phát trực tuyến cũng như hỗ trợ âm thanh FLAC cho nội dung âm thanh nén có chất lượng cao nhất (không tổn hao). Xem tài liệu về Định dạng nội dung nghe nhìn được hỗ trợ để biết thêm thông tin.

Bộ điều khiển khởi chạy trên các ứng dụng đã bị dừng

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

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

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 ứng dụng đã dừng hay không.

  • FLAG_INCLUDE_STOPPED_PACKAGES – Đưa bộ lọc ý định của các ứng dụng đã dừng vào danh sách mục tiêu tiềm năng cần 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 mục tiêu tiềm năng.

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

Lưu ý là hệ thống thêm FLAG_EXCLUDE_STOPPED_PACKAGES vào tất cả ý định truyền tin. Thư viện này thực hiện việc này để ngăn thông báo truyền tin từ các dịch vụ nền khỏi vô tình hoặc không cần thiết khởi chạy 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 cờ FLAG_INCLUDE_STOPPED_PACKAGES vào ý định truyền tin được phép kích hoạt các ứng dụng đã dừng.

Các ứng dụng sẽ ở trạng thái dừng khi được cài đặt lần đầu nhưng chưa khởi chạy và khi người dùng dừng các ứ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 cải thiện về việc khởi chạy và nâng cấp ứng dụng lần đầu tiên thông qua 2 thao tác theo ý định mới:

  • ACTION_PACKAGE_FIRST_LAUNCH – Gửi tới gói trình cài đặt của một ứng dụng khi ứng dụng đó chạy lần đầu (tức là lần đầu tiên ứng dụng chuyển ra khỏi trạng thái đã dừng). Dữ liệu chứa tên gói.
  • ACTION_MY_PACKAGE_REPLACED – Thông báo cho ứng dụng rằng ứng dụng đã được cập nhật với một phiên bản mới đã được cài đặt thay vì phiên bản hiện có. Thông báo này chỉ được gửi đến ứng dụng đã được thay thế. Lớp này không chứa bất kỳ dữ liệu bổ sung nào. Để nhận thao tác này, hãy khai báo bộ lọc ý định cho thao tác này. Bạn có thể sử dụng ý định để kích hoạt mã giúp đưa ứng dụng trở lại trạng thái chạy bình thường 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 phải ở trạng thái đã dừng).

Tiện ích cốt lõi

  • Bộ nhớ đệm LRU
    • Một lớp LruCache mới cho phép các ứng dụng của bạn hưởng lợi từ việc lưu vào bộ nhớ đệm hiệu quả. Các ứng dụng có thể dùng lớp này để giảm thời gian dùng để tính toán hoặc tải dữ liệu xuống từ mạng, trong khi vẫn duy trì mức sử dụng bộ nhớ hợp lý cho dữ liệu đã lưu vào bộ nhớ đệm.LruCache là một bộ nhớ đệm lưu trữ các tham chiếu rõ ràng đến một số lượng giá trị giới hạn. Mỗi lần truy cập một giá trị, giá trị đó sẽ được chuyển đến đầu hàng đợi. Khi một giá trị được thêm vào bộ nhớ đệm đầy đủ, 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

Chỉ số WebKit

  • Cookie lược đồ tệp
    • CookieManager hiện hỗ trợ những cookie sử dụng lượ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 bản sao của WebView hoặc CookieManager. Trong thực thể CookieManager, bạn có thể kiểm tra xem cookie lược đồ tệp có được bật hay không 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 ra mắt trong Android 3.0, phương thức mới onReceivedLoginRequest() sẽ thông báo cho ứng dụng lưu trữ rằng yêu cầu tự động đăng nhập cho người dùng đã được xử lý.
  • Xoá các 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 dùng nữa. Xem Báo cáo về sự khác biệt về API để 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ợ các ứng dụng web:

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

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

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

  • android.hardware.usb.accessory – Ứng dụng sử dụng API USB để 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 làm máy chủ.
  • android.hardware.usb.host – Ứng dụng sử dụng API USB để 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 ứng dụng dựa trên những 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ề cách khai báo tính năng trong tệp kê khai ứng dụng, hãy đọc Bộ lọc của Google Play.

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

Để biết thông tin chi tiết về tất cả các thay đổi đối với API trong Android 3.1 (API cấp 12), hãy xem Báo cáo về sự khác biệt về API.

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 giá trị nhận dạng số nguyên — 12 — đượ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 hệ thống xác định chính xác liệu ứng dụng có tương thích với hệ thống hay khô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, 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 của mình, bạn cũng có thể cần thêm thuộc tính android:minSdkVersion="12" vào phần tử <uses-sdk> trong tệp kê khai của ứng dụng.

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