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 các 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.

Thông tin nổi bật về nền tảng

Các 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 toàn hệ thống để đảm bảo trải nghiệm người dùng tuyệt vời 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 mang đến cho người dùng 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 một giải pháp thay thế theo tỷ lệ pixel thay cho tính năng kéo dài giao diện người dùng chuẩn cho các ứng dụng không được thiết kế để chạy trên các 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. Người dùng có thể truy cập vào chế độ mới từ biểu tượng trình đơn trên thanh hệ thống, dành cho các ứng dụng cần hỗ trợ khả năng tương thích.

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

    Trên các thiết bị hỗ trợ thẻ SD, giờ đây, người dùng có thể tải các tệp nội dung nghe nhìn trực tiếp từ thẻ SD sang các ứng dụng dùng các tệp đó. Một cơ sở hệ thống giúp ứng dụng có thể truy cập vào các tệp trong kho nội dung nghe nhìn của hệ thống.

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 cho API hỗ trợ màn hình của nền tảng để cung cấp cho nhà phát triển thêm nhiều cách để quản lý giao diện người dùng của ứng dụng trên nhiều thiết bị chạy Android. API này bao gồm các bộ hạn định tài nguyên mới và 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 của mình hiển thị trên nhiều kích thước, thay vì dựa vào các danh mục kích thước chung.

    Để đả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à hỗ trợ hạn chế cho nhiều kích thước màn hình, nền tảng cũng cung cấp chế độ tương thích thu phóng mới để hiển thị giao diện người dùng trên một khu vực màn hình nhỏ hơn, sau đó phóng to để 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ế độ kiểm soát 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 giới thiệu các API hỗ trợ màn hình mới giúp bạn có nhiều quyền kiểm soát hơn đối với cách hiển thị các ứ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 còn mở rộng với khả năng nhắm mục tiêu chính xác các dải 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), thay vì theo kích thước màn hình phổ biến (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 một ứ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 hoá 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 lượng không gian theo chiều ngang hoặc chiều dọc có sẵn. Nền tảng này biểu thị lượng không gian có sẵn bằng cách sử dụng 3 đặc điểm mới: smallestWidth, widthheight.

  • smallestWidth màn hình là kích thước tối thiểu cơ bản của màn hình, được đo bằng đơn vị pixel không phụ thuộc vào mật độ ("dp"). Chiều cao hoặc chiều rộng của màn hình là chiều dài ngắn hơn. Đối với màn hình theo hướng dọc, chiều rộng nhỏ nhất dựa trên chiều rộng, còn ở hướng ngang, chiều rộng dựa trên chiều cao. Trong mọi trường hợp, chiều rộng nhỏ nhất được lấy từ một đặc điểm cố định của màn hình và giá trị này không thay đổi, bất kể hướng. Chiều rộng nhỏ nhất rất quan trọng đối với ứng dụng vì chiều rộng này thể hiện chiều rộng ngắn nhất có thể mà giao diện người dùng của ứng dụng cần được vẽ, không bao gồm diện tích màn hình mà hệ thống dành riê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 đơn vị "dp", không bao gồm diện tích màn hình mà 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 hướng ngang và dọc.

Màn hình mới hỗ trợ API đượ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 chiều rộng nhỏ nhất 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 theo chiều rộng, chiều rộng hoặc chiều cao tối thiểu nhỏ nhất và
  • Các thuộc tính mới của tệp kê khai, để 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 và quản lý giao diện người dùng cũng như việc 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 mục tiêu màn hình trực tiếp hơn thông qua chiều rộng nhỏ nhất, chiều rộng và chiều cao, nên bạn cần nắm được 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. Các thiết bị thông thường, có mật độ và kích thước tính bằng dp.

Loại Mật độ (thông thường) Kích thước (dp) chiều rộng nhỏ nhất (dp)
Đ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ề bộ hạn định màn hình và thuộc tính tệp kê khai mới. Để biết thông tin đầy đủ về cách sử dụng API hỗ trợ màn hình, 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 của mình tốt hơn cho nhiều 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 các cấu hình tài nguyên được thiết kế cho tối thiểu nhỏ nhất, chiều rộng hiện tại hoặc chiều cao hiện tại cụ thể, được đo bằng pixel không phụ thuộc vào mật độ.

Các bộ hạn định mới bao gồm:

  • swNNNdp – Chỉ định chiều rộng nhỏ nhất 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 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, một số tài nguyên khác rộng hơn 600 dp và một số tài nguyên khác rộng hơn 720 dp. Khi 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. Để kiểm soát chính xác những tài nguyên được tải trên một màn hình nhất định, bạn có thể gắn thẻ tài nguyên bằng một bộ hạn định hoặc kết hợp nhiều 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 đã nêu trước đó, dưới đâ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ũ hơn 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 mới này khi cần để đảm bảo ứng dụng của bạn 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 kích thước mới.

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

Khung này cung cấp một tập hợp mới các thuộc tính tệp kê khai <supports-screens> cho phép bạn quản lý khả năng hỗ trợ của ứ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 được thiết kế để chạy trên đó, cũng như màn hình lớn nhất mà ứng dụng được thiết kế để chạy mà không cần đến chế độ tương thích màn hình mới của hệ thống. Giống như bộ hạn định tài nguyên 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 theo kích thước nhỏ nhất.

Các thuộc tính mới của tệp kê khai để hỗ trợ màn hình là:

  • android:compatibleWidthLimitDp="numDp" – Thuộc tính này cho phép bạn chỉ định chiều rộng nhỏ nhất 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 trên thanh hệ thống.
  • android:largestWidthLimitDp="numDp" – Thuộc tính này cho phép bạn chỉ định chiều rộng nhỏ nhất 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 sẽ buộc ứng dụng chuyển sang chế độ tương thích màn hình để đảm bảo màn hình hiện tại hiển thị tốt nhất.
  • android:requiresSmallestWidthDp="numDp" – Thuộc tính này cho phép bạn chỉ định chiều rộng nhỏ nhất 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ị được chỉ định, 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 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. Chúng tôi sẽ thêm tính năng hỗ trợ tính năng lọc vào bản phát hành sau này trên nền tảng. Những ứng dụng yêu cầu lọc dựa trên kích thước màn hình có thể sử dụng thuộc tính <supports-screens> hiện có.

Để 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 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 khai báo rõ ràng rằng chúng không hỗ trợ màn hình lớn như màn hình mà các ứng dụng đang chạy. Chế độ "thu phóng" mới này được điều chỉnh theo tỷ lệ pixel — chế độ này kết xuất ứ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 để 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 màn hình làm tuỳ chọn cho người dùng đối với các ứng dụng yêu cầu. Người dùng có thể bật và tắt chế độ thu phóng bằng một chế độ điều khiển có trên thanh hệ thống.

Vì chế độ tương thích màn hình mới có thể không phù hợp với một số ứng dụng, nên nền tảng sẽ cho phép ứng dụng vô hiệu hoá chế độ này bằng cách sử dụng các thuộc tính tệp kê khai. Khi ứng dụng tắt, hệ thống sẽ không cung cấp lựa chọn tương thích với "thu phóng" 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, vui lòng xem bài viết Chế độ mới cho ứng dụng trên màn hình lớn trên Blog dành cho nhà phát triển Android.

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ự có màn hình có mật độ trung bình, Android 3.2 ra 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 TV 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 làm việc với mật độ này. Đối với các trường hợp cần đầu ra cho màn hình 720p, nền tảng có thể tự động điều chỉnh tỷ lệ các phần tử trên giao diện người dùng.

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

  • Mảnh
    • Lớp Fragment.SavedState mới chứa thông tin trạng thái được truy xuất từ một thực thể của mảnh thông qua saveFragmentInstanceState().
    • Phương thức mới saveFragmentInstanceState() lưu trạng thái của thực thể hiện tại của Mảnh nhất định. Bạn có thể sử dụng trạng thái này sau khi tạo một thực thể mới của Mảnh khớ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 bất kỳ trạng thái đã lưu nào được khôi phục vào Chế độ xem.
    • Phương thức isDetached() xác định xem Mảnh có bị tách khỏi giao diện người dùng một cách rõ ràng hay không.
    • Phương thức attach()detach() mới 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 thiết lập các tài nguyên ảnh động cụ thể để chạy cho các thao tác 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 để lấy kích thước màn hình từ WindowManager
    • Các phương thức mới getSize()getRectSize() cho phép các ứng dụng lấy kích thước thô của màn hình.
  • Kiểu "ảnh ba chiều" công khai mới
    • Nền tảng này hiện hiển thị nhiều kiểu "ba chiều" công khai cho văn bản, tiện ích thanh thao tác và thẻ, v.v. Hãy truy cập vào R.style để xem danh sách đầy đủ.
  • LocalActivityManager, ActivityGroupLocalActivityManager hiện đã ngừng hoạt động
    • Các ứng dụng mới nên sử dụng Mảnh thay vì các lớp này. Để tiếp tục chạy trên các phiên bản nền tảng cũ hơn, bạn có thể dùng Thư viện hỗ trợ v4 (thư viện tương thích), có trong SDK Android. Thư viện hỗ trợ v4 cung cấp một phiên bản của Fragment API 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 hiển thị 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 các thẻ trong khu vực thanh thao tác.

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

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

Đồ hoạ

khung IME

  • Phương thức getModifiers() mới để 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 để truy xuất các chỉ số mô tả USB thô cho thiết bị. Bạn có thể sử dụng phương thức này để truy cập vào phần mô tả không được hỗ trợ trực tiếp thông qua API cấp cao hơn.

Mạng

Điện thoại

Tiện ích cốt lõi

  • Tiện ích có thể đóng gó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 cụ thể, đảm bảo rằng mục tiêu thực thi không đồng bộ.
    • Mã giao dịch giao thức IBinder mới TWEET_TRANSACTION cho phép các ứng dụng gửi một tweet đến đối tượng mục tiêu.

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à bạ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ề các tính năng cần thiết của phần cứng và phần mềm. Bạn sẽ 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>.

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

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

    Android 3.2 ra mắt các hằng số tính năng mới cho phép các ứng dụng chỉ định việc chúng yêu cầu hiển thị theo hướng ngang, dọc hay cả hai. Việc khai báo các hằng số này cho biết rằng không được cài đặt ứng dụng trên thiết bị không cung cấp hướng liên kết. Ngược lại, nếu một hoặc cả hai hằng số không được khai báo, thì tức là ứng dụng không có lựa chọn ưu tiên về hướng chưa được khai báo và có thể được cài đặt trên thiết bị không cung cấp 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 đó, ứng dụng được thiết kế chủ yếu cho một hướng, chẳng hạn như ứng dụng được thiết kế cho TV, có thể khai báo một trong các hằng số để đảm bảo rằng ứng dụng không có sẵn 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 yêu cầu tệp kê khai chạy ở một hướng cụ thể, bằng cách sử dụng thuộc tính android:screenOrientation, thì thao tác này cũng khai báo rằng ứng dụng yêu cầu hướng đó.

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

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.2 (API cấp 13), hãy xem Báo cáo về sự khác biệt về API.

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 giá trị nhận dạng số nguyên — 13 — đượ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.2 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.2. 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="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 Cấp độ API là gì?