Thay đổi về hành vi: tất cả ứng dụng

Nền tảng Android 17 có các thay đổi về hành vi có thể ảnh hưởng đến ứng dụng của bạn. Những thay đổi về hành vi sau đây áp dụng cho tất cả ứng dụng khi chạy trên Android 17, bất kể targetSdkVersion. Bạn nên kiểm thử ứng dụng rồi sửa đổi để hỗ trợ những thay đổi này cho phù hợp (nếu cần).

Ngoài ra, hãy nhớ tham khảo danh sách các thay đổi về hành vi chỉ ảnh hưởng đến những ứng dụng nhắm đến Android 17.

Bảo mật

Android 17 có những điểm cải tiến sau đây về tính bảo mật của thiết bị và ứng dụng.

Kế hoạch ngừng sử dụng usesClearTraffic

In a future release, we plan to deprecate the usesCleartextTraffic element. Apps that need to make unencrypted (HTTP) connections should migrate to using a network security configuration file, which lets you specify which domains your app needs to make cleartext connections to.

Be aware that network security configuration files are only supported on API levels 24 and higher. If your app has a minimum API level lower than 24, you should do both of the following:

  • Set the usesCleartextTraffic attribute to true
  • Use a network configuration file

If your app's minimum API level is 24 or higher, you can use a network configuration file and you don't need to set usesCleartextTraffic.

Hạn chế các quyền ngầm định đối với URI

Currently, if an app launches an intent with a URI that has the action Send, SendMultiple, or ImageCapture, the system automatically grants the read and write URI permissions to the target app. We plan to change this behavior in Android 18. For this reason, we recommend that apps explicitly grant the relevant URI permissions instead of relying on the system to grant them.

Hạn mức kho khoá cho mỗi ứng dụng

Các ứng dụng không nên tạo quá nhiều khoá trong Kho khoá Android, vì đây là một tài nguyên dùng chung cho tất cả ứng dụng trên thiết bị. Kể từ Android 17, hệ thống sẽ áp dụng giới hạn về số lượng khoá mà một ứng dụng có thể sở hữu. Giới hạn là 50.000 khoá đối với các ứng dụng không phải là ứng dụng hệ thống nhắm đến Android 17 (cấp độ API 37) trở lên và 200.000 khoá đối với tất cả các ứng dụng khác. Các ứng dụng hệ thống có giới hạn là 200.000 khoá, bất kể chúng nhắm đến cấp độ API nào.

Nếu một ứng dụng cố gắng tạo các khoá vượt quá hạn mức, thì quá trình tạo sẽ không thành công với KeyStoreException. Chuỗi thông báo của ngoại lệ chứa thông tin về giới hạn khoá. Nếu ứng dụng gọi getNumericErrorCode() trên ngoại lệ, thì giá trị trả về sẽ phụ thuộc vào cấp độ API mà ứng dụng nhắm đến:

  • Ứng dụng nhắm đến Android 17 (API cấp 37) trở lên: getNumericErrorCode() sẽ trả về giá trị ERROR_TOO_MANY_KEYS mới.
  • Tất cả các ứng dụng khác: getNumericErrorCode() trả về ERROR_INCORRECT_USAGE.

Trải nghiệm người dùng và giao diện người dùng hệ thống

Android 17 có những thay đổi sau đây nhằm mang lại trải nghiệm nhất quán và trực quan hơn cho người dùng.

Khôi phục chế độ hiển thị IME mặc định sau khi xoay

Kể từ Android 17, khi cấu hình của thiết bị thay đổi (ví dụ: thông qua thao tác xoay) và ứng dụng không tự xử lý việc này, thì chế độ hiển thị IME trước đó sẽ không được khôi phục.

Nếu ứng dụng của bạn trải qua một thay đổi về cấu hình mà ứng dụng không xử lý và ứng dụng cần bàn phím hiển thị sau khi thay đổi, thì bạn phải yêu cầu rõ ràng điều này. Bạn có thể gửi yêu cầu này theo một trong những cách sau:

  • Đặt thuộc tính android:windowSoftInputMode thành stateAlwaysVisible.
  • Yêu cầu bàn phím ảo theo phương thức lập trình trong phương thức onCreate() của hoạt động hoặc thêm phương thức onConfigurationChanged().

Hoạt động đầu vào của người dùng

Android 17 có những thay đổi sau đây ảnh hưởng đến cách ứng dụng tương tác với các thiết bị đầu vào của con người, chẳng hạn như bàn phím và bàn di chuột.

Theo mặc định, bàn di chuột sẽ gửi các sự kiện tương đối trong quá trình ghi lại con trỏ

Beginning with Android 17, if an app requests pointer capture using View.requestPointerCapture() and the user uses a touchpad, the system recognizes pointer movement and scrolling gestures from the user's touches and reports them to the app in the same way as pointer and scroll wheel movements from a captured mouse. In most cases, this removes the need for apps that support captured mice to add special handling logic for touchpads. For more details, see the documentation for View.POINTER_CAPTURE_MODE_RELATIVE.

Previously, the system did not attempt to recognize gestures from the touchpad, and instead delivered the raw, absolute finger locations to the app in a similar format to touchscreen touches. If an app still requires this absolute data, it should call the new View.requestPointerCapture(int) method with View.POINTER_CAPTURE_MODE_ABSOLUTE instead.

Nội dung nghe nhìn

Android 17 có những thay đổi sau đây về hành vi của nội dung nghe nhìn.

Tăng cường bảo mật âm thanh ở chế độ nền

Kể từ Android 17, khung âm thanh sẽ thực thi các hạn chế đối với hoạt động tương tác âm thanh ở chế độ nền, bao gồm cả việc phát âm thanh, yêu cầu lấy quyền phát âm thanh và API thay đổi âm lượng để đảm bảo rằng người dùng chủ động bắt đầu những thay đổi này.

Nếu ứng dụng cố gắng gọi API âm thanh trong khi ứng dụng không ở trong một vòng đời hợp lệ, thì API phát âm thanh và API thay đổi âm lượng sẽ âm thầm không thành công mà không đưa ra một ngoại lệ hoặc cung cấp thông báo lỗi. API quyền phát âm thanh không thành công với mã kết quả AUDIOFOCUS_REQUEST_FAILED.

Để biết thêm thông tin, bao gồm cả các chiến lược giảm thiểu, hãy xem bài viết Tăng cường bảo mật âm thanh ở chế độ nền.

Khả năng kết nối

Android 17 có những thay đổi sau đây để tăng cường khả năng kết nối của thiết bị.

Tự động ghép nối lại khi mất liên kết Bluetooth

Android 17 giới thiệu tính năng tự động ghép nối lại, một tính năng nâng cao ở cấp hệ thống được thiết kế để tự động giải quyết tình trạng mất kết nối Bluetooth.

Trước đây, nếu mất kết nối, người dùng phải tự chuyển đến phần Cài đặt để huỷ ghép nối rồi ghép nối lại thiết bị ngoại vi. Tính năng này dựa trên tính năng cải thiện bảo mật của Android 16 bằng cách cho phép hệ thống thiết lập lại kết nối trong nền mà không yêu cầu người dùng tự chuyển đến phần Cài đặt để hủy ghép nối và ghép nối lại thiết bị ngoại vi.

Mặc dù hầu hết các ứng dụng sẽ không yêu cầu thay đổi mã, nhưng nhà phát triển nên lưu ý đến những thay đổi về hành vi sau đây trong ngăn xếp Bluetooth:

  • Bối cảnh ghép nối mới: ACTION_PAIRING_REQUEST hiện bao gồm phần bổ sung EXTRA_PAIRING_CONTEXT, cho phép ứng dụng phân biệt giữa yêu cầu ghép nối tiêu chuẩn và nỗ lực tự động ghép nối lại do hệ thống khởi tạo.
  • Cập nhật khoá có điều kiện: Các khoá bảo mật hiện có sẽ chỉ được thay thế nếu quá trình ghép nối lại thành công và kết nối mới đáp ứng hoặc vượt quá mức bảo mật của kết nối trước đó.
  • Thời gian ý định đã sửa đổi: Ý định ACTION_KEY_MISSING hiện chỉ được truyền đi nếu nỗ lực tự động ghép nối lại không thành công. Điều này giúp giảm việc xử lý lỗi không cần thiết trong ứng dụng nếu hệ thống khôi phục thành công kết nối trong nền.
  • Thông báo cho người dùng: Hệ thống quản lý việc ghép nối lại thông qua các thông báo và hộp thoại mới trên giao diện người dùng. Người dùng sẽ được nhắc xác nhận nỗ lực ghép nối lại để đảm bảo họ biết về việc kết nối lại.

Nhà sản xuất thiết bị ngoại vi và nhà phát triển ứng dụng đồng hành nên xác minh rằng phần cứng và ứng dụng xử lý các quá trình chuyển đổi kết nối một cách suôn sẻ. Để kiểm thử hành vi này, hãy mô phỏng tình trạng mất kết nối từ xa bằng một trong các phương thức sau:

  • Xoá thông tin kết nối theo cách thủ công khỏi thiết bị ngoại vi
  • Huỷ ghép nối thiết bị theo cách thủ công trong phần: Cài đặt > Thiết bị đã kết nối