API Android 3.2

Cấp độ API: 13

Android 3.2 (HONEYCOMB_MR2) là một bản phát hành nền tảng gia tăng, bổ sung các tính năng mới cho người dùng và nhà phát triển. Các phần dưới đây cung cấp thông tin tổng quan về các tính năng mới và API dành cho nhà phát triển.

Đối với nhà phát triển, nền tảng Android 3.2 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.2, 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.

Nền tảng nổi bật

Tính năng mới dành cho người dùng

  • Tối ưu hoá cho nhiều loại máy tính bảng hơn

    Android 3.2 bao gồm nhiều tính năng tối ưu hoá trên hệ thống để đảm bảo mang lại trải nghiệm tuyệt vời cho người dùng trên nhiều thiết bị máy tính bảng hơn.

  • Khả năng tương thích thu phóng cho các ứng dụng có kích thước cố định

    Android 3.2 giới thiệu chế độ thu phóng khả năng tương thích mới giúp một cách mới để xem các ứng dụng có kích thước cố định trên các thiết bị lớn hơn. Chế độ mới cung cấp thay thế được điều chỉnh theo tỷ lệ pixel so với giao diện người dùng tiêu chuẩn kéo dài cho các ứng dụng không được thiết kế để chạy trên kích thước màn hình lớn hơn, chẳng hạn như trên máy tính bảng. Chế độ mới là mà người dùng có thể truy cập từ biểu tượng trình đơn trên thanh hệ thống cho những ứng dụng cần Google Cloud.

  • Đồng bộ hoá nội dung nghe nhìn từ thẻ SD

    Trên các thiết bị hỗ trợ thẻ SD, người dùng hiện có thể tải tệp phương tiện trực tiếp từ thẻ SD vào các ứng dụng sử dụng tệp đó. Một cơ sở hệ thống cho phép các ứng dụng truy cập vào các tệp từ kho phương tiện của hệ thống.

Các tính năng mới dành cho nhà phát triển

  • API mở rộng để quản lý tính năng hỗ trợ màn hình

    Android 3.2 giới thiệu các tiện ích mở rộng cho API hỗ trợ màn hình của nền tảng để cung cấp cho nhà phát triển những cách bổ sung để quản lý giao diện người dùng ứng dụng trên nhiều Thiết bị hỗ trợ Android. API này bao gồm các bộ hạn định tài nguyên mới và các thuộc tính tệp kê khai mới giúp bạn kiểm soát chính xác hơn cách ứng dụng hiển thị trên các kích thước khác nhau, thay vì dựa vào các danh mục kích thước tổng quát.

    Để đảm bảo hiển thị tốt nhất có thể cho các ứng dụng có kích thước cố định và các ứng dụng bị hạn chế hỗ trợ nhiều kích thước màn hình, nền tảng cũng cung cấp tính năng thu phóng mới chế độ tương thích kết xuất giao diện người dùng trên một khu vực màn hình nhỏ hơn, sau đó điều chỉnh tỷ lệ để lấp đầy không gian có sẵn trên màn hình. Để biết thêm thông tin về API hỗ trợ màn hình và các chế độ điều khiển mà API này cung cấp, hãy xem các phần bên dưới.

Tổng quan về API

API hỗ trợ màn hình

Android 3.2 ra mắt các API hỗ trợ màn hình mới giúp bạn kiểm soát nhiều hơn cách hiển thị ứng dụng trên nhiều kích thước màn hình. API này được xây dựng dựa trên API hỗ trợ màn hình hiện có, bao gồm cả mô hình mật độ màn hình tổng quát của nền tảng, nhưng mở rộng API này bằng khả năng nhắm mục tiêu chính xác các phạm vi màn hình cụ thể theo kích thước, được đo bằng đơn vị pixel không phụ thuộc vào mật độ (chẳng hạn như 600 dp hoặc 720 dp chiều rộng), thay vì theo kích thước màn hình tổng quát (chẳng hạn như lớn hoặc rất lớn)

Khi thiết kế giao diện người dùng của ứng dụng, bạn vẫn có thể dựa vào nền tảng để cung cấp tính năng trừu tượng mật độ, nghĩa là các ứng dụng không cần bù đắp cho sự khác biệt về mật độ pixel thực tế trên các thiết bị. Bạn có thể thiết kế giao diện người dùng của ứng dụng theo không gian chiều ngang hoặc chiều dọc có sẵn. Nền tảng này thể hiện dung lượng có sẵn bằng cách sử dụng 3 đặc điểm mới: smallestWidth, widthheight.

  • smallestWidth của màn hình là kích thước tối thiểu cơ bản, được đo bằng đơn vị pixel không phụ thuộc vào mật độ ("dp"). Chiều cao của màn hình hoặc chiều rộng, thì đó là chiều rộng ngắn hơn. Đối với màn hình theo hướng dọc, smallestWidth thường dựa trên chiều rộng, còn theo hướng ngang thì dựa trên chiều cao. Trong mọi trường hợp, chiều rộng nhỏ nhất được tính từ đặc tính cố định của màn hình và giá trị không thay đổi, bất kể hướng. Chiều rộng nhỏ nhất rất quan trọng cho các ứng dụng vì nó thể hiện chiều rộng ngắn nhất có thể trong đó giao diện người dùng của ứng dụng sẽ cần được vẽ, không bao gồm các khu vực trên màn hình đặt trước bởi hệ thống.
  • Ngược lại, chiều rộngchiều cao của màn hình đại diện cho không gian theo chiều ngang hoặc chiều dọc hiện tại có sẵn cho bố cục ứng dụng, được đo bằng "dp" đơn vị quảng cáo, không bao gồm khu vực màn hình được hệ thống đặt trước. Chiều rộng và chiều cao của màn hình thay đổi khi người dùng chuyển đổi hướng giữa màn hình ngang và dọc.

API hỗ trợ màn hình mới được thiết kế để cho phép bạn quản lý giao diện người dùng của ứng dụng theo smallestWidth của màn hình hiện tại. Bạn cũng có thể quản lý giao diện người dùng theo chiều rộng hoặc chiều cao hiện tại, nếu cần. Đối với những mục đích đó, API cung cấp các công cụ sau:

  • Bộ hạn định tài nguyên mới để nhắm mục tiêu bố cục và các tài nguyên khác đến chiều rộng, chiều cao hoặc chiều rộng nhỏ nhất tối thiểu và
  • Các thuộc tính tệp kê khai mới, để chỉ định phạm vi tương thích màn hình tối đa của ứng dụng

Ngoài ra, các ứng dụng vẫn có thể truy vấn hệ thống cũng như quản lý giao diện người dùng và tải tài nguyên trong thời gian chạy, như trong các phiên bản trước của nền tảng.

Vì API mới cho phép bạn nhắm đến màn hình trực tiếp hơn thông qua smallestWidth, chiều rộng và chiều cao, nên bạn nên tìm hiểu các đặc điểm điển hình của các loại màn hình khác nhau. Bảng dưới đây đưa ra một số ví dụ, được đo bằng đơn vị "dp".

Bảng 1. Thiết bị thông thường, với mật độ và kích thước tính theo dp.

Loại Mật độ (tổng quát) Kích thước (dp) smallestWidth (dp)
Số điện thoại cơ sở mdpi 320x480 320
Máy tính bảng nhỏ/điện thoại lớn mdpi 480x800 480
máy tính bảng 7 inch mdpi 600x1024 600
máy tính bảng 10 inch mdpi 800x1280 800

Các phần dưới đây cung cấp thêm thông tin về các bộ hạn định màn hình mới và tệp kê khai. Để có thông tin đầy đủ về cách sử dụng màn hình hỗ trợ API, hãy xem phần Hỗ trợ nhiều Màn hình.

Hỗ trợ bộ hạn định tài nguyên mới cho màn hình

Bộ hạn định tài nguyên mới trong Android 3.2 cho phép bạn nhắm mục tiêu bố cục tốt hơn cho các phạm vi kích thước màn hình. Bằng cách sử dụng bộ hạn định, bạn có thể tạo tài nguyên các cấu hình được thiết kế cho chiều rộng nhỏ nhất, chiều rộng tối thiểu cụ thể hoặc chiều cao hiện tại, được đo bằng pixel không phụ thuộc vào mật độ.

Các bộ hạn định mới là:

  • swNNNdp – Chỉ định smallestWidth tối thiểu mà tài nguyên sẽ được sử dụng, được đo bằng đơn vị "dp". Như đã đề cập ở trên, việc nhỏ nhất của màn hình là không đổi, bất kể hướng. Ví dụ: sw320dp, sw720dp, sw720dp.
  • wNNNdphNNNdp – Chỉ định chiều rộng hoặc chiều cao tối thiểu mà tài nguyên sẽ được sử dụng, được đo bằng đơn vị "dp". Như đã đề cập ở trên, chiều rộng và chiều cao của màn hình tương ứng với hướng của màn hình và thay đổi bất cứ khi nào hướng thay đổi. Ví dụ: w320dp, w720dp, h1024dp.

Bạn cũng có thể tạo nhiều cấu hình tài nguyên chồng chéo nếu cần. Ví dụ: bạn có thể gắn thẻ một số tài nguyên để sử dụng trên bất kỳ màn hình nào rộng hơn 480 dp, các chỉ số khác cho lớn hơn 600 dp và các chỉ số khác cho rộng hơn 720 dp. Thời gian nhiều cấu hình tài nguyên đủ điều kiện cho một màn hình nhất định, hệ thống sẽ chọn cấu hình phù hợp nhất. Để điều khiển chính xác đối với tài nguyên nào được tải trên một màn hình cụ thể, bạn có thể gắn thẻ các tài nguyên bằng một hoặc kết hợp một số bộ hạn định mới hoặc hiện có.

Dựa trên các phương diện điển hình được liệt kê trước đó, sau đây là một số ví dụ về cách bạn có thể sử dụng bộ hạn định mới:

res/layout/main_activity.xml   # For phones
res/layout-sw600dp/main_activity.xml   # For 7” tablets
res/layout-sw720dp/main_activity.xml   # For 10” tablets
res/layout-w600dp/main_activity.xml   # Multi-pane when enough width
res/layout-sw600dp-w720dp/main_activity.xml   # For large width

Các phiên bản cũ của nền tảng sẽ bỏ qua các bộ hạn định mới, vì vậy, bạn có thể kết hợp các bộ hạn định đó nếu cần để đảm bảo ứng dụng của mình trông đẹp mắt trên mọi thiết bị. Dưới đây là một số ví dụ:

res/layout/main_activity.xml   # For phones
res/layout-xlarge/main_activity.xml   # For pre-3.2 tablets
res/layout-sw600dp/main_activity.xml   # For 3.2 and up tablets

Để biết thông tin đầy đủ về cách sử dụng bộ hạn định mới, hãy xem phần Sử dụng bộ hạn định mới bộ hạn định kích thước.

Các thuộc tính tệp kê khai mới để tương thích với kích thước màn hình

Khung này cung cấp một bộ thuộc tính tệp kê khai <supports-screens> mới cho phép bạn quản lý việc hỗ trợ ứng dụng cho nhiều kích thước màn hình. Cụ thể, bạn có thể chỉ định màn hình lớn nhất và nhỏ nhất mà ứng dụng trên đó được thiết kế để chạy, cũng như màn hình lớn nhất mà chương trình được thiết kế chạy mà không cần màn hình mới của hệ thống chế độ tương thích. Giống như bộ hạn định tài nguyên được mô tả ở trên, các thuộc tính tệp kê khai mới chỉ định phạm vi màn hình mà ứng dụng hỗ trợ, như được chỉ định bởi smallestWidth.

Dưới đây là các thuộc tính tệp kê khai mới để hỗ trợ màn hình:

  • android:compatibleWidthLimitDp="numDp" – Thuộc tính này cho phép bạn chỉ định smallestWidth tối đa mà ứng dụng có thể chạy mà không cần chế độ tương thích. Nếu màn hình hiện tại lớn hơn giá trị được chỉ định, hệ thống sẽ hiển thị ứng dụng ở chế độ thông thường nhưng cho phép người dùng tuỳ ý chuyển sang chế độ tương thích thông qua một chế độ cài đặt trong thanh hệ thống.
  • android:largestWidthLimitDp="numDp" – Thuộc tính này cho phép bạn chỉ định smallestWidth tối đa mà ứng dụng được thiết kế để chạy. Nếu màn hình hiện tại lớn hơn giá trị được chỉ định, hệ thống buộc ứng dụng chuyển sang chế độ tương thích màn hình để đảm bảo tốt nhất hiển thị trên màn hình hiện tại.
  • android:requiresSmallestWidthDp="numDp" – Thuộc tính này cho phép bạn chỉ định smallestWidth tối thiểu mà ứng dụng có thể chạy. Nếu màn hình hiện tại nhỏ hơn giá trị đã chỉ định, thì hệ thống sẽ coi ứng dụng không tương thích với thiết bị, nhưng không ngăn việc cài đặt và chạy ứng dụng.

Lưu ý: Google Play hiện không lọc ứng dụng dựa trên bất kỳ thuộc tính nào ở trên. Tính năng hỗ trợ lọc sẽ được thêm vào bản phát hành nền tảng sau này. Ứng dụng yêu cầu có thể sử dụng <supports-screens> hiện có để lọc dựa trên kích thước màn hình .

Để biết thông tin đầy đủ về cách sử dụng các thuộc tính mới, hãy xem phần Khai báo tính năng hỗ trợ kích thước màn hình.

Chế độ tương thích màn hình

Android 3.2 cung cấp chế độ tương thích màn hình mới cho các ứng dụng tuyên bố rõ ràng rằng chúng không hỗ trợ các màn hình lớn như màn hình trên mà chúng đang chạy. Tính năng "thu phóng" mới này được điều chỉnh theo tỷ lệ pixel hiển thị ứng dụng trong một khu vực màn hình nhỏ hơn rồi điều chỉnh tỷ lệ pixel thành lấp đầy màn hình hiện tại.

Theo mặc định, hệ thống cung cấp chế độ tương thích với màn hình dưới dạng tuỳ chọn cho người dùng, đối với các ứng dụng yêu cầu chế độ này. Người dùng có thể bật và tắt chế độ thu phóng bằng cách sử dụng một nút điều khiển có sẵn trong thanh hệ thống.

Do chế độ tương thích màn hình mới có thể không phù hợp với tất cả các ứng dụng, nền tảng sẽ cho phép ứng dụng tắt nó bằng cách sử dụng tệp kê khai . Khi bị ứng dụng tắt, hệ thống sẽ không cung cấp tính năng "thu phóng" khả năng tương thích dưới dạng một tuỳ chọn cho người dùng khi ứng dụng đang chạy.

Lưu ý: Để biết thông tin quan trọng về cách để kiểm soát chế độ tương thích trong các ứng dụng của bạn, vui lòng xem bài viết Chế độ mới dành cho ứng dụng trên màn hình lớn trên Android Blog dành cho nhà phát triển.

Mật độ màn hình mới cho TV 720p và các thiết bị tương tự

Để đáp ứng nhu cầu của các ứng dụng chạy trên TV 720p hoặc tương tự với màn hình có mật độ trung bình, Android 3.2 giới thiệu một mật độ tổng quát mới, tvdpi, với dpi gần đúng là 213. Các ứng dụng có thể truy vấn mật độ mới trong densityDpi và có thể sử dụng bộ hạn định tvdpi mới để gắn thẻ tài nguyên cho truyền hình và các thiết bị tương tự. Ví dụ:

res/drawable-tvdpi/my_icon.png   # Bitmap for tv density

Nhìn chung, các ứng dụng không cần phải hoạt động với mật độ này. Cho các tình huống trong đó cần có đầu ra cho màn hình 720p, bạn có thể điều chỉnh các phần tử trên giao diện người dùng tự động theo nền tảng.

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

  • Mảnh
    • Lớp Fragment.SavedState mới lưu giữ thông tin trạng thái được truy xuất từ một thực thể mảnh thông qua saveFragmentInstanceState().
    • Phương thức mới saveFragmentInstanceState() lưu trạng thái thực thể hiện tại của Mảnh đã cho. Bạn có thể dùng trạng thái này sau khi tạo một thực thể mới của Mảnh phù hợp với trạng thái hiện tại.
    • Phương thức mới setInitialSavedState() đặt trạng thái đã lưu ban đầu cho một Mảnh khi được tạo lần đầu tiên.
    • Phương thức gọi lại onViewCreated() mới sẽ thông báo cho Mảnh rằng onCreateView() đã trả về, nhưng trước khi khôi phục bất kỳ trạng thái đã lưu nào vào Chế độ xem.
    • Phương thức isDetached() xác định xem Mảnh có được tách rời rõ ràng khỏi giao diện người dùng hay không.
    • attach() mới và detach() cho phép ứng dụng đính kèm lại hoặc tách rời các mảnh trong giao diện người dùng.
    • Phương thức nạp chồng setCustomAnimations() mới cho phép bạn đặt ảnh động cụ thể để chạy các tác vụ nhập/thoát và đặc biệt là khi bật ngăn xếp lui. Cách triển khai hiện tại không tính đến hành vi khác nhau của các mảnh khi bật ngăn xếp lui.
  • Thông tin về kích thước màn hình trong ActivityInfo và ApplicationInfo
  • Trình trợ giúp để nhận thông tin về kích thước hiển thị qua WindowManager
    • Các phương thức mới getSize()getRectSize() cho phép các ứng dụng có được kích thước thô của màn hình.
  • Các kiểu "3D" công khai mới
    • Giờ đây, nền tảng này hiển thị nhiều ảnh "ba ảnh" công khai phong cách cho văn bản, tiện ích thanh tác vụ và các tab, v.v. Xem Hãy R.style để xem danh sách đầy đủ.
  • LocalActivityManager, ActivityGroupLocalActivityManager hiện không dùng nữa
    • Các ứng dụng mới sẽ sử dụng Mảnh thay vì các lớp này. Người nhận tiếp tục chạy trên các phiên bản cũ hơn của nền tảng, bạn có thể sử dụng Thư viện (thư viện khả năng tương thích), có trong SDK Android. Thư viện hỗ trợ v4 cung cấp một phiên bản API Mảnh tương thích với Android 1.6 (API cấp 4).
    • Đối với các ứng dụng phát triển dựa trên Android 3.0 (API cấp 11) trở lên, các thẻ thường được trình bày trong giao diện người dùng bằng cách sử dụng ActionBar.newTab() mới và các API liên quan để đặt thẻ trong khu vực thanh thao tác.

Khung nội dung đa phương tiện

  • Các ứng dụng sử dụng nhà cung cấp nội dung đa phương tiện của nền tảng (MediaStore) hiện có thể đọc dữ liệu đa phương tiện trực tiếp từ thẻ SD có thể tháo rời, nếu được thiết bị hỗ trợ. Ứng dụng cũng có thể tương tác trực tiếp với các tệp trên thẻ SD bằng API MTP.

Đồ hoạ

khung IME

  • Phương thức getModifiers() mới cho truy xuất trạng thái hiện tại của các phím bổ trợ.

khung USB

  • Phương thức getRawDescriptors() mới cho truy xuất trình mô tả USB thô cho thiết bị. Bạn có thể sử dụng để truy cập vào phần mô tả không được hỗ trợ trực tiếp thông qua cấp độ.

Mạng

Điện thoại

Phần mềm tiện ích chính

  • Tiện ích có thể phân phối
  • Binder và IBinder
    • Phương thức mới dumpAsync() trong BinderIBinder cho phép các ứng dụng kết xuất vào một tệp đã chỉ định, đảm bảo rằng mục tiêu thực thi không đồng bộ.
    • Mã giao dịch IBinder mới (TWEET_TRANSACTION) cho phép các ứng dụng gửi tweet với đối tượng mục tiêu.

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à bạ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 Chơi các tính năng phần cứng và phần mềm cần thiết. Bạn khai báo các hằng số này và các hằng số tính năng khác trong phần tử tệp kê khai <uses-feature>.

Google Play lọc ứng dụng dựa trên các thuộc tính <uses-feature> của ứng dụng để đảm bảo rằng ứng dụng chỉ được cung cấp cho những thiết bị đáp ứng các yêu cầu của ứng dụng.

  • Hằng số tính năng cho các yêu cầu về hướng ngang hoặc dọc

    Android 3.2 giới thiệu các hằng số tính năng mới cho phép ứng dụng chỉ định xem chúng có yêu cầu hiển thị theo hướng ngang, hướng dọc hay cả hai hay không. Việc khai báo các hằng số này cho biết rằng bạn không được cài đặt ứng dụng trên một thiết bị không cung cấp hướng liên kết. Ngược lại, nếu bạn không khai báo một hoặc cả hai hằng số, thì điều này cho biết rằng ứng dụng không có lựa chọn ưu tiên cho các hướng chưa khai báo và có thể được cài đặt trên một thiết bị không cung cấp các hướng đó.

    Một ứng dụng thông thường hoạt động đúng cách ở cả hướng ngang và dọc thường không cần khai báo yêu cầu về hướng. Thay vào đó, một ứng dụng được thiết kế chủ yếu cho một hướng (chẳng hạn như ứng dụng dành cho TV) có thể khai báo một trong các hằng số để đảm bảo ứng dụng đó không dùng được cho các thiết bị không cung cấp hướng đó.

    Nếu bất kỳ hoạt động nào được khai báo trong tệp kê khai yêu cầu phải chạy ở một hướng cụ thể, thông qua thuộc tính android:screenOrientation, thì nội dung khai báo này cũng cho biết ứng dụng yêu cầu hướng đó.

  • Các hằng số tính năng khác

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

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

Cấp độ API:

Nền tảng Android 3.2 cung cấp phiên bản cập nhật của API khung. API Android 3.2 được gán một mã nhận dạng bằng số nguyên — 13 — 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 hệ thống xác định chính xác xem một ứ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.2 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.2. Tuỳ thuộc vào nhu cầu, bạn cũng có thể cần thêm thuộc tính android:minSdkVersion="13" 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 API là gì Cấp độ?