Tiếp tục series có gì mới trên Android 9 (Pie) 😄

Hỗ trợ multi-camera và những cải tiến về camera

Trên các device chạy Android 9 sẽ có khả năng truy cập đồng thời vào các luồng từ 2 camera vật lý trở lên. Các device với 2 camera trước hoặc sau, bạn có thể tạo ra những tính năng độc đáo mà khó có thể làm với 1 camera như seamless zoom, chụp bokeh và stereo vision. Các API cũng hỗ trợ bạn gọi các logic hoặc các luồng máy ảnh tự động chuyển đổi giữa 2 hoặc nhiều máy ảnh.

Các cải tiến khác trong camera bao gồm thêm Session parameters hỗ trợ giảm delay trong quá trình chụp và chia sẻ bề mặt cho phép camera xử lý các trường hợp sử dinjg khác nhau mà không cần dừng camera. API cũng hỗ trợ hiển thị dựa trên flash và truy cập vào OIS timestamp để ổn định hình ảnh ở tầng app-level và 1 số hiệu ứng khác.

Trong Android 9, multi-camera API hỗ trợ camera monochrome cho các device với các loại tương thích FULL hoặc LIMIT. Monochrome output sẽ được lưu qua định dạng YUV_420_888 với Y là grayscale, U (Cb) là 128 và V (Cr) là 128.

Android 9 cũng hỗ trợ external USB/UVC cameras trên các device được hỗ trợ.

ImageDecoder cho drawables và bitmaps

Android 9 giới thiệu class ImageDecoder cung cấp một giải pháp hiện đại cho việc decode hình ảnh. Sử dụng class này thay thế cho các API BitmapFactoryBitmapFactory.Options.

ImageDecoder cho phép bạn tạo các Drawable hoặc Bitmap từ các byte buffer, file hoặc một URI. Đầu tiên, gọi createSource() với source của image encoded. Sau đó, gọi decodeDrawable() hoặc decodeBitmap() bằng cách truyền vào đối tượng ImageDecoder.Source để tạo Drawable hoặc Bitmap. Để thay đổi default setting, truyền OnHeaderDecodedListener vào decodeDrawable() hoặc decodeBitmap(). ImageDecoder gọi onHeaderDecoded() với default width và height của ảnh. Nếu encoded image là ảnh GIF động hay WebP, decodeDrawable() trả về một Drawable là một instance của class AnimatedImageDrawable.

Có các phương thức khác nhau được dùng để set image properties:

  • Để scale decoded image đúng kích thước, truyền kích thước vào setTargetSize(). Bạn cugnx có thể scale image bằng cách sử dụng sample size. Truyền sample size trực tiếp vào setTargetSampleSize().
  • Để crop ảnh trong khoảng của scale image, gọi phương thức setCrop().
  • Để tạo mutable bitmap, truyền true vào setMutableRequired().

ImageDecoder cho phép bạn thêm custom cũng như những effect phức tạp vào ảnh như thêm viền hoặc đánh dấu tròn. Sử dụng setPostProcessor() với một instance của class PostProcessor để thực thi các lệnh drawing bạn muốn.

Animation

Class AnimatedImageDrawable cũng đã xuất hiện trên Android 9 dùng để vẽ và hiển thị ảnh động GIF và WebP. AnimatedImageDrawable hoạt động tương tự như AnimatedVectorDrawable trong đó render thread drive ảnh động của AnimatedImageDrawable. Render sử dụng một worker thread để decode nên việc decode sẽ khoogn ảnh hưởng các tác vụ khác trên render thread. Implement điều này sẽ cho phép app của bạn hiển thị ảnh đọng mà không cần quản lý cập nhật hoặc can thiệp vào các sự kiên khác trên giao diện người dùng của ứng dụng.

AnimatedImageDrawable có thể decode sử dụng instance của ImageDecoder. Đoạn code dưới đây ví dụ cho việc sử dụng ImageDecoder để decode AnimatedImageDrawable của bạn:

@Throws(IOException::class)
private fun decodeImage() {
    val decodedAnimation = ImageDecoder.decodeDrawable(
        ImageDecoder.createSource(resources, R.drawable.my_drawable))

    // Prior to start(), the first frame is displayed.
    (decodedAnimation as? AnimatedImageDrawable)?.start()
}

ImageDecoder có một vài phương thức cho phép bạn chỉnh sửa thêm hình ảnh, ví dụ như sử dụng phương thức setPostProcessor() để modify hiển thị của ảnh như chèn dấu tròn hay bo góc ảnh.

Autofill framework

Trên Android 9 đã có nhiều cải tiến ví dụ như Autofill service để nâng cao hơn nữa trải nghiệm người dùng khi điền vào các form. Để tìm hiểu về cách sử dụng các tính năng tự động điền trong ứng dụng, hay xem hướng dẫn Autofill Framework

Secure key import vào Keystore

Android 9 cung cấp thêm bảo mật mã khóa key bằng cách thêm tính năng import khóa bảo mật đã mã hóa vào Keystore sử dụng ASN.1-encoded key format. Keymaster sau đó sẽ giải mã key trong Keystore. Các content của key không bao giờ xuất hiện dưới dạng văn bản thô trong bộ nhớ chủ của device. Tìm hiểu thêm về Import key mã hóa bảo mật hơn tại Đây

API signature sceme với key rotation

APK Signature Scheme v3 đã được hỗ trợ trên Android 9. Scheme này có tùy chọn để include một bản ghi proof-of-rotation trong khối chữ ký của một certificate. Khả năng này cho phép ứng dụng của bạn được ký bằng certificate mới bằng cách liên kết các certificate trước đây của APK với certificate hiện tại đã ký.

Bài viết của mình đến đây là hết. Cảm ơn mọi người đã đọc 😄