Wear Watchface

Tạo ứng dụng cho đồng hồ thông minh chạy Wear OS by Google.
Bản cập nhật mới nhất Bản phát hành ổn định Bản phát hành dùng thử Bản phát hành beta Bản phát hành alpha
Ngày 22 tháng 2 năm 2023 1.1.1 - - 1.2.0-alpha07

Khai báo phần phụ thuộc

Để thêm một phần phụ thuộc trên Wear, bạn phải thêm kho lưu trữ Maven của Google vào dự án. Đọc nội dung Kho lưu trữ Maven của Google để biết thêm thông tin.

Thêm các phần phụ thuộc cho cấu phần phần mềm bạn cần trong tệp build.gradle cho ứng dụng hoặc mô-đun:

Groovy

dependencies {
    // Use to implement wear watchfaces
    implementation "androidx.wear.watchface:watchface:1.1.1"

    // Use to implement wear watchface complications
    implementation "androidx.wear.watchface:watchface-complications-data-source:1.1.1"
    // (Kotlin-specific extensions)
    implementation "androidx.wear.watchface:watchface-complications-data-source-ktx:1.1.1"

    // Use to implement a watchface style and complication editor
    implementation "androidx.wear.watchface:watchface-editor:1.1.1"

    // Can use to render complications.
    // This library is optional and watchfaces may have custom implementation for rendering
    // complications.
    implementation "androidx.wear.watchface:watchface-complications-rendering:1.1.1"
}

Kotlin

dependencies {
    // Use to implement wear watchfaces
    implementation("androidx.wear.watchface:watchface:1.1.1")

    // Use to implement wear watchface complications
    implementation "androidx.wear.watchface:watchface-complications-data-source:1.1.1"
    // (Kotlin-specific extensions)
    implementation "androidx.wear.watchface:watchface-complications-data-source-ktx:1.1.1"

    // Use to implement a watchface style and complication editor
    implementation("androidx.wear.watchface:watchface-editor:1.1.1")

    // Can use to render complications.
    // This library is optional and watchfaces may have custom implementation for rendering
    // complications.
    implementation "androidx.wear.watchface:watchface-complications-rendering:1.1.1"
}

Để biết thêm thông tin về các phần phụ thuộc, hãy xem bài viết Thêm phần phụ thuộc vào bản dựng.

Ý kiến phản hồi

Ý kiến phản hồi của bạn có thể giúp chúng tôi cải thiện Jetpack. Hãy cho chúng tôi biết nếu bạn phát hiện lỗi mới hoặc có ý tưởng cải thiện thư viện này. Vui lòng xem các lỗi hiện có trong thư viện này trước khi báo một lỗi mới. Bạn có thể thêm lượt bình chọn cho lỗi hiện có bằng cách nhấp vào nút dấu sao.

Báo lỗi mới

Xem tài liệu về công cụ theo dõi lỗi để biết thêm thông tin.

Phiên bản 1.2

Phiên bản 1.2.0-alpha07

Ngày 22 tháng 2 năm 2023

Phát hành androidx.wear.watchface:watchface-*:1.2.0-alpha07. Phiên bản 1.2.0-alpha07 bao gồm các thay đổi sau.

Tính năng mới

  • Trên Android T, OEM (Nhà sản xuất thiết bị gốc) sẽ có thể xác định xem một yêu cầu chức năng có xuất phát từ mặt đồng hồ trong danh sách do siêu dữ liệu android.support.wearable.complications.SAFE_WATCH_FACES xác định ở tệp kê khai của nhà cung cấp bằng ComplicationRequest#isForSafeWatchFace hay không. Nhà cung cấp này sẽ cần có quyền com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE để nhận được mọi dữ liệu khác ngoài TargetWatchFaceSafety.UNKNOWN.

  • Cũng trên Android T, CustomValueUserStyleSetting2 có thể sử dụng với dung lượng lên tới 12,5 kb. Hạn mức trước đây cho CustomValueUserStyleSetting là 1 kb. Mặc dù giới hạn kích thước tăng lên, nhưng các nhà phát triển mặt đồng hồ vẫn nên duy trì dữ liệu ở quy mô nhỏ vì chế độ cài đặt được gửi qua Bluetooth trong quá trình chỉnh sửa và băng thông Bluetooth bị hạn chế.

Thay đổi về API

  • Chúng tôi thêm tham số không bắt buộc eglContextAttribList vào GlesRendererGlesRenderer2, qua đó cho phép bạn đặt EGL14.EGL_CONTEXT_CLIENT_VERSION đã truyền vào EGL14.eglCreateContext. (I2a83e)
  • Chúng tôi di chuyển các thư viện mặt đồng hồ sang androidx.core.util.Consumer thay vì java.util.function.Consumer. (I273f5)
  • Nhiều ngoại lệ được gửi từ trình truy cập thuộc tính KT (Iff9d9)
  • Chúng tôi thêm InteractiveWatchFaceClient.isComplicationDisplayPolicySupported để ứng dụng có thể xác định xem có phải mô phỏng hoạt động hỗ trợ thay cho mặt đồng hồ cũ hay không. (I24c89)
  • Chúng tôi quyết định isForSafeWatchFace phải là một IntDef gồm ba trạng thái. (Ief2f7)
  • Đối với Android T, chúng tôi ra mắt ComplicationRequest.isForSafeWatchFace để OEM sử dụng và phiên bản này yêu cầu com.google.wear.permission.GET_IS_FOR_SAFE_WATCH_FACE. Đối với các nguồn dữ liệu trong hình ảnh hệ thống, yêu cầu này sẽ trả về giá trị true nếu mặt đồng hồ yêu cầu nằm trong danh sách các mặt đồng hồ an toàn do nguồn dữ liệu nêu trong tệp kê khai. (I0cbb6)
  • Đối với Android T, chúng tôi thêm CustomValueUserStyleSetting2 có thể chứa tối đa 12,5 kb. Hạn mức trước đây cho CustomValueUserStyleSetting là 1 kb. (I0b100)

Phiên bản 1.2.0-alpha06

Ngày 25 tháng 1 năm 2023

Phát hành androidx.wear.watchface:watchface-*:1.2.0-alpha06. Phiên bản 1.2.0-alpha06 bao gồm các thay đổi sau.

Tính năng mới

  • Chúng tôi đang cố gắng thực hiện công việc của mình để thêm tính năng hỗ trợ cho các liên kết nền tảng chức năng. Tính năng này chưa có sẵn, nhưng bạn hãy chú ý theo dõi nhé!
  • Chúng tôi thêm tính năng hỗ trợ XML ComplicationSlot cho các loại chức năng mới, GOAL_PROGRESS và WEIGHTED_ELEMENTS.

Sửa lỗi

  • Khắc phục lỗi rò rỉ trong đó trình chỉnh sửa mặt đồng hồ không được phát hành đúng cách trên các thiết bị Samsung. (3b5987)
  • Khắc phục lỗi khi các chức năng đôi khi không hiển thị chính xác khi chuyển đổi giữa mặt đồng hồ với nhiều mục yêu thích. (b38ece)
  • Khắc phục lỗi chuyển đổi tuần tự bằng perOptionScreenReaderNames dẫn đến sự cố với mặt đồng hồ. (e9f466)

Phiên bản 1.2.0-alpha05

Ngày 7 tháng 12 năm 2022

Phát hành androidx.wear.watchface:watchface-*:1.2.0-alpha05. Phiên bản 1.2.0-alpha05 bao gồm các thay đổi sau.

Tính năng mới

  • Cách đây không lâu, chúng tôi đã thêm chế độ hỗ trợ cho UserStyleSettings phân cấp. Giờ đây, từ Android T, bạn có thể có nhiều ComplicationSlotsUserStyleSetting trong một hệ phân cấp. Sẽ chỉ có một ComplicationSlotsUserStyleSetting hoạt động, tuỳ theo các lựa chọn của người dùng về kiểu.

  • Chúng tôi đang cải thiện chế độ hỗ trợ trình đọc màn hình cho ListOptionComplicationSlotsOption bằng cách thêm trường screenReaderName. Lưu ý: trước Android T, trình chỉnh sửa đồng hành sẽ bỏ qua trường này.

Các thay đổi về API

  • Chúng tôi đã thêm một trường screenReaderName mới (không bắt buộc) vào ListOptionComplicationSlotsOption để trình chỉnh sửa có thể sử dụng. Trên các thiết bị chạy hệ điều hành trước Android T, trình chỉnh sửa đồng hành sẽ bỏ qua trường này. (I75326)
  • Từ Android T, nhiều ComplicationSlotsUserStyleSettings hiện được hỗ trợ trong hệ phân cấp kiểu, miễn là chỉ có một trong số đó được hoạt động tại một thời điểm. Chúng tôi đã thêm một hàm tiện ích findComplicationSlotsOptionForUserStyle vào UserStyleSchema để giúp tìm ComplicationSlotsOption đang hoạt động (nếu có). (Ic2b06)
  • Kéo RangedValuesTypes vào đối tượng đồng hành của RangedValueComplicationData và đổi tên thành TYPE_UNDEFINED, thêm TYPE_RATING và một TYPE_PERCENTAGE mới. (I55d02)
  • Chúng tôi đã đổi tên DynamicFloat thử nghiệm thành FloatExpression và đánh dấu là @hide. (Idf4f1)
  • Thêm chú thích @JvmDefaultWithCompatibility (I8f206)

Phiên bản 1.2.0-alpha04

Ngày 9 tháng 11 năm 2022

Phát hành androidx.wear.watchface:watchface-*:1.2.0-alpha04. Phiên bản 1.2.0-alpha04 bao gồm các thay đổi sau.

Tính năng mới

  • Đối với Android T, chúng tôi thêm tính năng hỗ trợ cho 2 kiểu chức năng mới là GoalProgressComplicationDataWeightedElementsComplicationData.
  • GoalProgressComplicationData tương tự như RangedValueComplicationData nhưng giá trị của nó được phép vượt quá mục tiêu (đối với RangedValueComplicationData, giá trị được giới hạn trong phạm vi [tối thiểu .. tối đa]) có ảnh hưởng đến thiết kế hình ảnh có thể không phù hợp với mọi mặt đồng hồ.
  • GoalProgressComplicationData thêm tính năng hỗ trợ cho biểu đồ hình tròn và bảng chi tiết tương tự về dữ liệu đơn giản.
  • Chúng tôi thêm tính năng hỗ trợ không bắt buộc cho ColorRamps vào RangedValueComplicationData.
  • Đối với Android T, chúng tôi thêm ComplicationPersistencePolicysetCachePolicy vào ComplicationData. Việc này hiện cho phép nhà cung cấp kiểm soát việc chức năng có tiếp tục hoạt động hay không (tức là có được lưu vào bộ nhớ đệm trước khi khởi động lại hay không). Hầu hết các chức năng sẽ không cần đặt chế độ kiểm soát bộ nhớ đệm, nhưng làm như vậy có thể khắc phục các trường hợp ngách với dữ liệu cũ cho một số chức năng được cập nhật thường xuyên (ví dụ: các chức năng liên quan đến dữ liệu sức khoẻ). Chúng tôi cũng thêm ComplicationDisplayPolicy trong đó DO_NOT_SHOW_WHEN_DEVICE_LOCKED hướng dẫn mặt đồng hồ tương thích không hiển thị chức năng này khi thiết bị bị khoá. (Ic9574)

Các thay đổi về API

  • GoalProgressComplicationData, WeightedElementsComplicationDataColorRamp không còn ở chế độ thử nghiệm nữa. (Ica9e2)
  • ComplicationPersistencePolicyComplicationDisplayPolicy hiện được đánh dấu đúng cách là API T. (I31d88)
  • Hàm khởi tạo ComplicationSlotOverlay không dùng nữa hiện có DeprecationLevel.WARNING cho phép gọi lại qua Java. (Ib308c)
  • Chúng tôi khắc phục một số vấn đề về khả năng tương thích của Java với ComplicationRequestListener, CanvasComplication, ComplicationTapFilterInteractiveWatchFaceClient bằng cách chú thích các vấn đề đó bằng @JvmDefaultWithCompatibility (Id94fc)
  • Chúng tôi xoá ProtoLayoutComplicationDataListComplicationData thử nghiệm. Câu chuyện của nhà phát triển về những điều này không rõ ràng, chúng tôi hy vọng sẽ trở lại trong tương lai. (I9df05)
  • Chúng tôi thêm ValueType trở lại RangedValueComplicationData. WeightedElementsComplicationData hiện hỗ trợ màu nền. Chúng tôi xoá DiscreteRangedValueComplicationData vì chức năng này là một tập hợp con của WeightedElementsComplicationData. (I6446c)

Sửa lỗi

  • Đưa isForScreenShot vào mã bằng và hàm băm. Đảm bảo onRenderParametersChanged nhận được giá trị isForScreenshot chính xác (I04a41)
  • Sửa lỗi rò rỉ WatchFaceControlService từ các ứng dụng không có giao diện người dùng. (e90e00)

Phiên bản 1.2.0-alpha03

Ngày 5 tháng 10 năm 2022

Phát hành androidx.wear.watchface:watchface-*:1.2.0-alpha03. Phiên bản 1.2.0-alpha03 bao gồm các thay đổi sau.

Tính năng mới

  • Không có tính năng mới nào nhưng chúng tôi đã khắc phục một số lỗi của trình chỉnh sửa mặt đồng hồ.

Các thay đổi về API

  • Ngừng sử dụng UserStyleSchema.userStyleSettingsrootUserStyleSettings trở thành API không thử nghiệm (Ie96e3)
  • Ngừng thử nghiệm rootUserStyleSettings (I8d6b3)
  • Chúng tôi đã đánh dấu WatchFaceColors là API thử nghiệm vì nó không được một số hệ thống hỗ trợ (I6d75d)
  • Hiển thị DisconnectReasons trong API công khai để API này hoạt động với IntDef. (I791f8)

Sửa lỗi

  • Đóng mọi trình chỉnh sửa đang mở trên đồng hồ nếu SysUI ngừng hoạt động. Nếu SysUI ngừng hoạt động và trình chỉnh sửa mặt đồng hồ không đóng, mặt đồng hồ có thể ở trạng thái không nhất quán vì hệ thống dựa vào SysUI để duy trì bất kỳ thay đổi nào về kiểu người dùng.(ba762a
  • Khắc phục sự cố rò rỉ bộ nhớ trong ComplicationDataSourceInfoRetriever, trong đó phần tiếp nối của coroutine Kotlin đang đóng vai trò là một gốc gc và giữ lại hoạt động của trình chỉnh sửa.(33ee06)

Phiên bản 1.2.0-alpha02

Ngày 21 tháng 9 năm 2022

Phát hành androidx.wear.watchface:watchface-*:1.2.0-alpha02. Phiên bản 1.2.0-alpha02 bao gồm các thay đổi sau.

Tính năng mới

  • Một số mặt đồng hồ có cấu hình bên ngoài UserStyle, có ảnh hưởng đến phần hình ảnh (ví dụ: chọn ảnh nền). Chúng tôi đã thêm Renderer.sendPreviewImageNeedsUpdateRequest để cho phép mặt đồng hồ yêu cầu hình ảnh xem trước đã cập nhật. Xin lưu ý rằng bạn phải có một hệ thống đã cập nhật tương ứng thì mới dùng được.

  • Chúng tôi cũng thêm một API cho các mặt đồng hồ để giúp hệ thống thấy được màu của mặt đồng hồ đó nhằm chọn bảng màu tương ứng. XIn lưu ý rằng chúng tôi đã thử nghiệm tính năng này trong một bản vá tiếp theo.

  • Giờ đây, mọi loại ComplicationData đều hỗ trợ SmallImages.

Các thay đổi về API

  • Trình quản lý hình nền đôi khi có thể tách rời công cụ và tạo một công cụ khác. Chúng tôi đã thêm một int def DisconnectReason và mở rộng ClientDisconnectListener bằng một phương thức mới bao gồm cả một DisconnectReason, cho phép trình nghe quan sát các quá trình tách rời công cụ. (I45cce)
  • Thêm hai thông số không bắt buộc nameResourceIdscreenReaderResourceId vào hàm khởi tạo ComplicationSlotOverlay (I157e8)
  • Chúng tôi đã thêm một trình bao bọc guava cho trường hợp quá tải mới của getOrCreateInteractiveWatchFaceClient bằng một PreviewImageUpdateRequestedListener. (Ic31f0)
  • Chúng tôi đã thêm Renderer.sendPreviewImageNeedsUpdateRequest, hữu ích cho các mặt đồng hồ có trạng thái bên ngoài UserStyleSchema. Giá trị này ảnh hưởng đến giao diện của đồng hồ (ví dụ: mặt đồng hồ có hình nền có thể chọn). Ở phía máy khách, chúng tôi đã thêm PreviewImageUpdateRequestedListener làm thông số không bắt buộc vào getOrCreateInteractiveWatchFaceClient để quan sát các yêu cầu này. (Iff44a)
  • Chúng tôi đơn giản hoá API để cho thấy WatchFaceColors, nay có một thuộc tính đơn giản tên là watchFaceColors trên Trình kết xuất mà mặt đồng hồ có thể đặt. Bạn cần cập nhật thuộc tính này khi cần thiết để đáp ứng mọi thay đổi về kiểu. Thay vì dùng WallpaperManager để quan sát các thay đổi về màu sắc, chúng tôi đã thêm OnWatchFaceColorsListener vào InteractiveWatchFaceClient. (I490bc)
  • Chúng tôi thêm một lớp WatchFaceColors chứa 3 màu nổi bật nhất của mặt đồng hồ, cũng như thêm các phương thức mở watchfaceColorsnotifyWatchFaceColorsChanged vào Trình kết xuất. Các phương thức này cho phép hệ thống lấy màu của mặt đồng hồ qua WallpaperManager.getWallpaperColors. (I3d611)
  • ShortTextComplicationData, RangedValueComplicationData, NoPermissionComplicationData (và DiscreteRangedValueComplicationData thử nghiệm, GoalProgressComplicationDataWeightedElementsComplicationData) nay đều hỗ trợ SmallImages. Nếu mặt đồng hồ chọn hiển thị một chức năng có nhiều màu, thì giờ đây, mặt đồng hồ đó có tuỳ chọn để sử dụng SmallImage nhiều màu, trong khi trước đó phải dùng hình ảnh đơn sắc. (I257df)
  • Tái cấu trúc PreviewImageUpdateRequestedListener thành Consumer<> (Ia875d)
  • Thay thế loại Phương thức trừu tượng đơn (SAM) tuỳ chỉnh OnWatchfaceColorsListener bằng loại SAM Java chung (Người tiêu dùng) (I0c489)
  • Chúng tôi đã ngừng sử dụng những phương thức getOrCreateInteractiveWatchFaceClientlistenableGetOrCreateInteractiveWatchFaceClient cũ không chỉ định PreviewImageUpdateRequestedListener. (Iec502)

Sửa lỗi

  • DisconnectReason.BINDER_DIED đổi tên thành DisconnectReason.ENGINE_DIED (I4eb0e)

Phiên bản 1.2.0-alpha01

Ngày 10 tháng 8 năm 2022

Phát hành androidx.wear.watchface:watchface-*:1.2.0-alpha01. Phiên bản 1.2.0-alpha01 bao gồm các thay đổi sau.

Tính năng mới

  • Chúng tôi đã thêm tính năng hỗ trợ thử nghiệm cho nhiều định dạng chức năng mới. Đây là khía cạnh đang trong quá trình phát triển; các định dạng mới này có thể thay đổi mà không cần thông báo trước và hiện không có hỗ trợ trình kết xuất nào từ CanvasComplicationDrawable.
  • Chúng tôi cũng đã thêm lề không bắt buộc vào các khu vực hiển thị chức năng để giúp việc nhấn vào các vùng chức năng nhỏ trở nên dễ dàng hơn.

Thay đổi về API

  • Lớp BoundingArc thử nghiệm hiện không thể thay đổi. (If624a)
  • Các khu vực hiển thị chức năng nhỏ có thể khó nhấn. Để giúp giảm thiểu điều này, chúng tôi ra mắt tính năng hỗ trợ lề để tăng diện tích cho thao tác nhấn mà không làm ảnh hưởng đến quá trình kết xuất. Trừ phi được chỉ định (trong mã hoặc qua XML), lề của ComplciationSlots có kích thước bằng 0. (I14089)
  • Thay đổi chữ ký getComplicationSlotInflationFactory(CurrentUserStyleRepository) để trả về một thực thể ban đầu không rỗng. Trước đây việc trả về giá trị rỗng sẽ tạo ra lỗi, nên việc này chỉ để giúp hợp đồng API trở nên rõ ràng hơn. (I0fcc0)
  • Chúng tôi đã thêm đối số currentUserStyleRepository vào phương thức WatchFaceService.getComplicationSlotInflationFactory để nhất quán với createComplicationSlotsManager. (I2ddd2)
  • UserStyleFlavors đã trở thành tính năng không thử nghiệm. (I69cdc)
  • Chúng tôi xoá ValueType thử nghiệm khỏi RangedValueComplicationData, thay vào đó ra mắt DiscreteRangedValueComplicationData thử nghiệm giống như RangedValueComplicationData, ngoại trừ phạm vi và giá trị số nguyên. Chúng tôi cũng ra mắt GoalProgressComplicationData thử nghiệm, tương tự như RangedValueComplicationData, ngoại trừ việc hướng tới mục tiêu có giá trị ngầm ẩn tối thiểu là 0 và giá trị được phép lớn hơn targetValue. Vui lòng lưu ý đối với mọi biến thể RangedValue, bạn phải chỉ định ít nhất một trong các hình ảnh đơn sắc, văn bản hoặc tiêu đề. (I9590c)
  • Chúng tôi đã xoá boundsWithMargins khỏi ComplicationSlotState vì phần mềm hệ thống chưa có trường hợp sử dụng này. (I42e26)
  • Chúng tôi thêm tính năng hỗ trợ thử nghiệm cho WeightedElementsComplicationData, bao gồm một loạt các Thành phần (các cặp trọng số và màu sắc) cùng với văn bản/tiêu đề/hình ảnh không bắt buộc. Chúng có thể được thể hiện dưới dạng biểu đồ hình tròn, trong đó màu sắc cần phải có ý nghĩa dựa trên ngữ cảnh vì thường không có chỗ trong chức năng để hiển thị nhãn. (I87eea)
  • Hiện tại, ColorRamps thử nghiệm mà RangedValueComplicationDataGoalProgressComplicationData sử dụng (không bắt buộc) cho phép bạn chỉ định một trình tự gồm tối đa 7 màu và 1 cờ cho biết liệu các màu có được chỉnh sửa mượt mà hay không hoặc có nên hiển thị các bước màu đồng nhất có kích thước bằng nhau hay không. (I9f5bf)
  • RangedValueComplicationData.drawSegmented đã được thay đổi thành valueType, là một số nguyên có ValueType IntDef tương ứng, cung cấp ý nghĩa ngữ nghĩa cho giá trị theo phạm vi và có thể được trình kết xuất chức năng sử dụng để tác động đến việc tạo kiểu. (I0616b)
  • Chúng tôi thêm tính năng hỗ trợ thử nghiệm cho ColorRanges (không bắt buộc) vào RangedValueComplicationData. Thông thường, các chức năng sẽ được kết xuất bằng màu sắc theo lựa chọn của mặt đồng hồ, nhưng đôi khi ComplicationDataSource là vị trí tốt nhất để đặt màu sắc, ví dụ như khi chúng có ý nghĩa ngữ nghĩa cụ thể. Chẳng hạn như từ màu đỏ sang màu xanh dương để xác định nhiệt độ. (I5153a)
  • Chúng tôi đã thêm một gợi ý drawSegmented thử nghiệm vào RangedValueComplicationData. Điều này sẽ báo hiệu cho trình kết xuất vẽ chỉ báo giá trị theo phạm vi bằng các phân đoạn, trong đó 1 phân đoạn = 1 đơn vị. (I7d7c1)

Sửa lỗi

  • Chúng tôi thêm tính năng xác định ComplicationSlotBounds liên quan đến một toạ độ màn hình được xác định trước. (I0985d)

Phiên bản 1.1

Phiên bản 1.1.1

Ngày 10 tháng 8 năm 2022

Phát hành androidx.wear.watchface:watchface-*:1.1.1. Phiên bản 1.1.1 bao gồm các thay đổi sau.

  • Đây là bản phát hành sửa lỗi và người dùng nên nâng cấp lên phiên bản 1.1.0.

Sửa lỗi

  • Việc khởi động mặt đồng hồ mang tính không đồng bộ, và nếu bạn nhận được một chức năng trước khi mặt đồng hồ sẵn sàng, thì mặt đồng hồ đó sẽ được đưa vào danh sách pendingInitialComplications và được áp dụng sau đó. Thật không may rằng pendingInitialComplications được áp dụng quá sớm, nghĩa là có một khoảng thời gian trong khi khởi chạy mặt đồng hồ mà các chức năng vẫn được đặt vào pendingInitialComplications và bị bỏ qua. Vấn đề này hiện đã được khắc phục. Ngoài ra, bản vá này còn sửa một lỗi khiến ComplicationRenderer nhầm lẫn khi cố tải các phần giữ chỗ không đồng bộ, dẫn đến việc đồ hoạ biên dịch không bao giờ cập nhật. Cuối cùng, hy vọng rằng bản vá này sẽ khắc phục một lỗi lý thuyết, trong đó cần hợp nhất nhiều pendingInitialComplications. (0d03ba3)

  • Khắc phục tình trạng tắc nghẽn tiềm ẩn trong InteractiveInstanceManager khi getExistingInstanceOrSetPendingWallpaperInteractiveWatchFaceInstance đang giữ khoá lâu hơn mức cần thiết. Thông thường, chúng ta mong đợi engine.setUserStyle sẽ nhanh chóng, nhưng nếu vì lý do nào đó, việc này không như mong đợi thì chúng ta có thể gặp phải tình trạng tắc nghẽn/ANR. Bản vá này di chuyển các công việc không cần thiết ra khỏi khoá, loại bỏ khả năng gây tắc nghẽn.(5a2adca)

  • Khắc phục một số vấn đề giữ lại WatchFaceService. Đôi khi, WakeLock có thể giữ lại WatchFaceService, lỗi này được khắc phục bằng cách thêm một lệnh gọi release(). Ngoài ra, StateFlows có thể giữ lại WatchFaceService, việc huỷ các CoroutineScopes ngầm sẽ khắc phục điều đó.(fd48138)

  • Thêm thời gian chờ vào awaitDeferredWatchFace* và khắc phục watchfaceOverlayStyle NullPointerException. Trong các trường hợp thông thường, quá trình này không dùng hết thời gian chờ, kể cả sau khi cài đặt mới và các trường hợp DirectBoot có mức tải CPU cao. Chúng tôi cũng đã khắc phục lỗi NPE nếu getWatchfaceOverlayStyle được gọi sau close().(a4c3a5a)

Phiên bản 1.1.0

Ngày 15 tháng 6 năm 2022

Phát hành androidx.wear.watchface:watchface-*:1.1.0. Phiên bản 1.1.0 bao gồm các thay đổi sau.

Thay đổi quan trọng kể từ phiên bản 1.0.0

Cải thiện tính năng chỉnh sửa:

  • Chúng tôi thêm tuỳ chọn hỗ trợ cho lược đồ phân cấp, cho phép phân cấp các kiểu được ghi chép bởi giao diện người dùng của trình chỉnh sửa. Giờ đây, bạn có thể chỉ định các biểu tượng riêng biệt để sử dụng trên mặt đồng hồ và trình chỉnh sửa đồng hành.
  • Hỗ trợ khả năng chọn tham gia cho nhiều phiên bản của mặt đồng hồ, mỗi phiên bản có sẵn một mã nhận dạng duy nhất trên tất cả các nền tảng API.
  • Giờ đây, bạn có thể chỉ định tên mà con người có thể đọc được của ComplicationSlots để sử dụng trong trình chỉnh sửa.
  • Hỗ trợ thử nghiệm để tạo kiểu cho "phiên bản", một lựa chọn các kiểu được hiển thị từ trình chỉnh sửa đồng hành.
  • Khi chỉnh sửa hai phiên bản của mặt đồng hồ, các phiên bản mặt đồng hồ nay có thể dùng chung tài nguyên, nhờ đó tiết kiệm bộ nhớ
  • Khi chọn một chức năng trong trình chỉnh sửa mặt đồng hồ, nhà cung cấp hiện tại đã được chọn trước

Chức năng được cải thiện:

  • Giờ đây, bạn có thể chỉ định ComplicationType cho nguồn dữ liệu chính và phụ, qua đó giúp các nhà phát triển có trải nghiệm linh hoạt hơn khi sử dụng.
  • Chúng tôi thêm ComplicationDataTimeline để cung cấp một chuỗi dữ liệu định thời gian được gửi đến mặt đồng hồ, dữ liệu này sẽ được lưu vào bộ nhớ đệm và cập nhật tự động. Ví dụ: dự báo thời tiết hôm nay tại nhiều thời điểm hoặc nhiều sự kiện sắp tới trên lịch.
  • ComponentName của nhà cung cấp chức năng là một phần của ComplicationData.
  • Giờ đây, các chức năng đã được lưu vào bộ nhớ đệm sẽ mang lại trải nghiệm tốt hơn khi bạn chuyển đổi giữa các mặt đồng hồ.

Thay đổi khác

  • Hiện tại, bạn có thể định nghĩa UserStyleSchemaComplicationSlots ở định dạng XML. Việc này giúp đơn giản hoá cấu trúc mặt đồng hồ và cho phép hệ thống truy vấn siêu dữ liệu nhanh hơn.
  • Giờ đây, mặt đồng hồ có thể ảnh hưởng đến các màu dùng để hiển thị lớp phủ hệ thống.

Phiên bản 1.1.0-rc01

Ngày 18 tháng 5 năm 2022

Phát hành androidx.wear.watchface:watchface-*:1.1.0-rc01. Phiên bản 1.1.0-rc01 bao gồm các thay đổi sau.

Tính năng mới

  • Chúng tôi điều chỉnh một số tính năng hữu dụng để hỗ trợ mặt đồng hồ XML, giúp bạn dễ dàng hơn trong việc chỉ định ComplicationSlotBounds và hỗ trợ các tài liệu tham chiếu. Tiếp tục thử nghiệm với chức năng cạnh BoundingArc, đưa nó qua drawHighlight mặc dù bạn không nên dùng nó vào thời điểm đó.

Thay đổi về API

  • Chúng tôi đã thêm một tình trạng quá tải thử nghiệm là drawHighlight, trong đó chấp nhận tham số BoundingArc. (I705f8)
  • Mặt đồng hồ XML hiện hỗ trợ các tham chiếu tài nguyên. Tạo điều kiện cho bạn sử dụng cùng một hằng số ở cả XML và mã. (I3ef61)
  • Chúng tôi đã bổ sung khả năng xác định ComplicationSlotBounds trong biểu mẫu center_x, center_y, size_x, size_y. Giờ đây, bạn cũng có thể sử dụng các đơn vị khác nhau (chẳng hạn như dp) bằng cách sử dụng tài liệu tham chiếu tài nguyên. (Iace98)

Sửa lỗi

  • Sửa runBlockingWithTracing đang chạy tác vụ trên ngữ cảnh không chính xác.(4f595fe)
  • Đặt BaseEditorSession.close ở chế độ đồng bộ. Vấn đề khiến BaseEditorSession.close không đồng bộ là do chúng tôi huỷ bỏ ComplicationDataSourceInfoRetriever quá muộn dẫn đến cảnh báo nội dung rác trong logcat. Điều này có thể vô hại nhưng cần tránh vì spam logcat gây mất tập trung.(35a5308)

Phiên bản 1.1.0-beta02

Ngày 11 tháng 5 năm 2022

androidx.wear.watchface:watchface-*:1.1.0-beta02 đã phát hành. Phiên bản 1.1.0-beta02 bao gồm các thay đổi sau.

Tính năng mới

  • Chúng tôi đã thêm hỗ trợ thử nghiệm cho các loại ComplicationData mới. Các loại này chưa sẵn sàng để sử dụng nhưng hãy để mắt đến không gian này nhé.

Thay đổi về API

  • Chúng tôi đã thêm BoundingArc, một lớp thử nghiệm mô tả hình dạng của một góc khu vực hiển thị chức năng. Nó đã được thêm vào ComplicationSlot và được chuyển qua ComplicationSlotStateWatchFaceMetadataClient. (I61a40)
  • Chúng tôi đã thêm tính năng kế thừa chế độ cài đặt trong UserStyleSetting XML. Nó cho phép bạn giảm độ chi tiết và chia sẻ chế độ cài đặt giữa các mặt đồng hồ. (Ief841)
  • Chúng tôi đã thêm hai loại thử nghiệm mới của ComplicationData: ListComplicationDataProtoLayoutComplicationData. Hiện tại, chúng tôi không hỗ trợ tính năng hiển thị nội dung thuộc một trong hai loại này, và WearOS hiện không nhận ra các loại này nếu nó được thêm vào một tệp kê khai ComplicationDataSource's. (I1811c)

Sửa lỗi

  • Khắc phục chuyển đổi tuần tự của loại TimeLineEntry. Chúng tôi không chuyển đổi tuần tự loại TimeLineEntry, tức là TimeLineEntries đã lưu vào bộ nhớ đệm của loại NoData sẽ bị diễn giải nhầm thành loại thuộc chức năng chính dẫn đến NPE khi các trường bắt buộc không tồn tại được sử dụng. (55ffdf5)
  • Khắc phục lỗi của setComplicationData các trường có trình thả dòng thời gian(fb392f5)
  • Khắc phục lỗi đôi khi runBlockingWithTracing sẽ dẫn đến NPE(12ca62e)
  • Khắc phục lỗi đôi khi chúng tôi gặp phải ClassNotFoundException: android.support.wearable.complications.ComplicationText khi nhận được sự phức tạp.(217942d9)
  • Sửa lỗi trong GlesRenderer.backgroundThreadInitInternal nơi chỉ gọi onBackgroundThreadGlContextCreated nếu EGL14.eglCreateContext được gọi. Khắc phục một lỗi khác khiến ảnh chụp màn hình bị lỗi do verticalFlip.(c674ad2)
  • Sửa lỗi kiểm tra phiên bản XML WatchFaceService, nó đang tải từ gói không chính xác.(dfa06f3)
  • Định dạng lưới phần giữ chỗ hiện sử dụng gói bên trong. Chúng tôi không muốn phần giữ chỗ làm hỏng các mặt đồng hồ hiện có, có thể sử dụng bên trong a.s.w.c.ComplicationData ẩn Trước đây, định dạng có dây của dữ liệu NoDataComplication lưu trữ phần giữ chỗ trong các trường thông thường (có vấn đề vì mặt đồng hồ cũ sẽ vô tình hiển thị chuỗi phần giữ chỗ). Thay vào đó, chúng ta hiện sử dụng gói bên trong để tách riêng toàn bộ dữ liệu này.(d5e7bd2)

Phiên bản 1.1.0-beta01

Ngày 20 tháng 4 năm 2022

Phát hành androidx.wear.watchface:watchface-*:1.1.0-beta01. Phiên bản 1.1.0-beta01 bao gồm các thay đổi sau.

Thay đổi về API

  • Giờ đây, các phương thức WatchFaceMetadataClient (getUserStyleSchema, getComplicationSlotMetadataMap, getUserStyleFlavors) và HeadlessWatchFaceClient.getUserStyleFlavors sẽ trả về RuntimeException chưa đánh dấu, thay vì WatchFaceException. (I0718a)
  • WatchFaceMetadataClient.WatchFaceException đã được di chuyển khỏi lớp để có thể sử dụng lại. (I4e869)

Sửa lỗi

  • WatchFaceMetadataClient sẽ không còn gặp sự cố khi được gửi một phần ComplicationSlotBounds.(Iaafd)

Phiên bản 1.1.0-alpha05

Ngày 6 tháng 4 năm 2022

Phát hành androidx.wear.watchface:watchface-*:1.1.0-alpha05. Phiên bản 1.1.0-alpha05 bao gồm các thay đổi sau.

Tính năng mới

  • Giờ đây, bạn có thể biết nguồn dữ liệu nào đã gửi ComplicationData bằng cách kiểm tra ComplicationData.dataSource. Một số mặt đồng hồ có thể sử dụng tính năng này để tuỳ chỉnh giao diện hiển thị phức tạp. (I44a73)

Thay đổi về API

  • Renderer.CanvasRendererRenderer.GlesRenderer hiện không dùng nữa, thay vào đó là Renderer.CanvasRenderer2Renderer.GlesRenderer2 hỗ trợ SharedAssets. Các phương thức này được truyền sang phương thức hiển thị. Đối với khả năng tương tác java, chúng tôi ra mắt ListenableCanvasRenderer2ListenableGlesRenderer2. (I31ffa)
  • Thêm chức năng xác định phiên bản cho @WatchFaceFlavorsExperimental – danh sách các mặt đồng hồ được định cấu hình sẵn (I04dd0)
  • Renderer.sharedAssets nay là một StateFlow và chúng tôi đã xoá những Renderer.SharedAssetsFactory (I12ac5) không dùng đến.
  • UserStyleSchema.userStyleSettings không còn được dùng nữa (Iba7e3)
  • Chúng tôi thêm HeadlessWatchFaceClient.getUserStyleSchemaDigestHash để giúp HeadlessWatchFaceClient chịu mức hao tổn tương đối thấp khi truyền giản đồ qua AIDL trước khi tính toán hàm băm thông báo. (I33597)
  • Chúng tôi thêm isUserStyleSchemaStatic vào WatchFaceMetadataClient, điều này đúng khi và chỉ khi UserStyleSchema có thể dựa vào để không thay đổi trừ phi tệp APK mặt đồng hồ được cập nhật. (I45a3f)
  • Chúng tôi thêm getDigestHash vào UserStyleSchema để tính toán hàm băm thông báo của giản đồ. Thông tin này có thể được dùng để xác định một cách hiệu quả về việc UserStyleSchema có thay đổi hay không. (I2063d)
  • METADATA_KEY_DATA_SOURCE_DEFAULT_CONFIGURATION_SUPPORTED được đổi tên thành METADATA_KEY_DATA_SOURCE_DEFAULT_CONFIG_SUPPORTED (I9ba5d)
  • UserStyleSetting.OnWatchEditorData đã được đổi tên thành UserStyleSetting.WatchFaceEditorData, chứa dữ liệu mà chỉ có trình chỉnh sửa mặt đồng hồ sử dụng. (If3afb)

Phiên bản 1.1.0-alpha04

Ngày 9 tháng 3 năm 2022

Phát hành androidx.wear.watchface:watchface-*:1.1.0-alpha04. Phiên bản 1.1.0-alpha04 bao gồm các thay đổi sau.

Thay đổi về API

  • Đến nay, ComplicationData không phải lúc nào cũng dùng được (ví dụ: ComplicationData đã hết hạn lưu vào bộ nhớ đệm). Vì vậy, chúng tôi gia hạn NoDataComplication bằng một phần giữ chỗ không bắt buộc ComplicationData và thêm ComplicationText.PLACEHOLDER, MonochromaticImage.PLACEHOLDER, SmallImage.PLACEHOLDER, PhotoImage.PLACEHOLDER, vốn chỉ được phép sử dụng cho phần giữ chỗ NoDataComplicationData. Nếu được chọn, các phần giữ chỗ này sẽ được đề xuất hiển thị với các hộp/miếng giữ xám. (I6285d)
  • Chúng tôi thêm ComplicationData.getNextChangeInstant để cho bạn biết phiên bản tức thì tiếp theo sau giá trị tham chiếu tức thì mà tại đó mọi trường của chức năng có thể thay đổi. Yếu tố này được sử dụng nội bộ để lên lịch khung nhằm mục đích cập nhật chức năng. Ví dụ: nếu mặt đồng hồ thường cập nhật 1 lần/phút thì việc đặt chức năng trên đồng hồ bấm giờ khiến đồng hồ cập nhật 1 lần/giây. (I7ceb2)
  • EditorSession.watchFaceId hiện có thể dùng được trên mọi cấp độ API. Ngoài ra, giờ đây, giá trị của yếu tố này sẽ luôn nhất quán với WatchState.watchFaceInstanceId. (I323b9)
  • API getPendingIntentForTouchEvent không còn cần thiết vì vấn đề liên quan đã được khắc phục trong khung này, vì vậy tất cả API liên quan đã bị xoá. Mặt đồng hồ không cần làm gì đặc biệt để PendingIntents kích hoạt, ngay cả khi gần đây nút màn hình chính đã được nhấn vào. (I1f2e8)
  • Chúng tôi đã thêm RendererParameters.isForScreenShot. Yếu tố này sẽ đúng nếu sự kết xuất là cho ảnh chụp màn hình. Một số mặt đồng hồ có ảnh động cần biết yếu tố này để điều chỉnh nhằm đảm bảo kết quả tốt nhất. (I96d99)
  • Chúng tôi đã thêm WatchFaceExceptionReason vào WatchFaceException để cung cấp bối cảnh cho sự cố. (I01d15)
  • ComplicationDataSourceService.onImmediateComplicationRequest đã bị xoá. Thay vào đó, ComplicationRequest.immediateResponseRequired đã được thêm vào để thông báo rằng trình cung cấp cần phản hồi nhanh (tốt nhất là trả lời trong vòng < 100 mili giây). Xin lưu ý rằng chức năng này được bảo vệ theo quyền com.google.android.wearable.permission.USE_IMMEDIATE_COMPLICATION_UPDATE đặc quyền. (Ie6b23)
  • Cập nhật tính chất rỗng trong lõi và appcompat để phù hợp với Tiramisu DP2 (I0cbb7)

Sửa lỗi

  • Bây giờ, ứng dụng mặt đồng hồ sẽ gặp sự cố ngoại lệ nếu việc xác thực giản đồ không thành công (Ia400f)

Phiên bản 1.1.0-alpha03

Ngày 9 tháng 2 năm 2022

Phát hành androidx.wear.watchface:watchface-*:1.1.0-alpha03. Phiên bản 1.1.0-alpha03 bao gồm các thay đổi sau.

Thay đổi về API

  • Chúng tôi thêm tính năng hỗ trợ thử nghiệm cho giản đồ kiểu phân cấp. Chúng tôi đã thêm một thuộc tính mới vào androidx.wear.watchface.style.UserStyleSetting.Option, childSettings, vốn ban đầu chỉ được ListOption sử dụng. Việc này cho phép hệ thống phân cấp kiểu được sử dụng trong giao diện người dùng của Trình chỉnh sửa, UserStyle liên quan không thay đổi và vẫn là Map<String, ByteArray>. (Iaf6f4)
  • Chúng tôi đã thêm WatchFace.OverlayStyle cho phép mặt đồng hồ định cấu hình việc hiển thị lớp phủ trạng thái hệ thống. (I8520d)
  • Chúng tôi đã giới thiệu clearWithBackgroundTintBeforeRenderingHighlightLayer, một thông số hàm khởi tạo không bắt buộc mới cho CanvasRenderer (mặc định là false). Nếu bạn đặt thông số này thành true thì canvas sẽ bị xoá bằng màu sắc nhạt của nền. (Ie01e5)
  • Thêm khoá siêu dữ liệu androidx.watchface.complications.datasource.DEFAULT_CONFIGURATION_SUPPORTED cho phép các nguồn dữ liệu phức tạp cho biết rằng các nguồn đó có thể cung cấp giá trị mặc định mà không cần bất kỳ cấu hình nào (Icc0d4)
  • Thông thường, khi chỉnh sửa mặt đồng hồ, bạn sẽ thấy cả thực thể tương tác và không có giao diện người dùng. Để giúp tiết kiệm bộ nhớ, chúng tôi ra mắt Renderer.SharedAssets, cho phép trình kết xuất mặt đồng hồ chia sẻ dữ liệu không thể thay đổi (ví dụ: kết cấu và chương trình đổ bóng) giữa các thực thể. GlesRenderer.setEglConfigGlesRenderer.setEglDisplay không được dùng nữa. Chúng tôi không bao giờ có ý định làm cho các yếu tố này có thể đặt được vì làm như vậy sẽ dẫn đến hành vi không xác định. (I0d9e7)
  • Chúng tôi đã thêm setNameResourceIdsetScreenReaderNameResourceId (tham chiếu đến tài nguyên chuỗi) vào ComplicationSlot.Builder và các phương thức getter tương ứng trong androidx.wear.watchface.client.ComplicationSlotState. Hoạt động này cho phép hệ thống tìm nạp tên của ComplicationSlots để sử dụng trong trình chỉnh sửa và trình đọc màn hình. (If6c6a)
  • WatchfaceMetadataClient.getUserStyleSchemagetComplicationSlotMetadataMap hiện đang gửi WatchFaceException thay vì RemoteException. (I86f11)
  • onSynchronousComplicationRequest và các chức năng liên quan trong ComplicationDataSourceService đã được đổi tên thành onImmediateComplicationRequest, v.v. (I87ba0)
  • Trình chỉnh sửa mặt đồng hồ có ít không gian trên màn hình hơn so với trình chỉnh sửa đồng hành, vì vậy, việc hỗ trợ nhiều biểu tượng cho trình chỉnh sửa mặt đồng hồ là hợp lý. Bản vá này thêm OnWatchEditorData (hiện chỉ chứa một biểu tượng) vào tất cả UserStyleSettings và tại các lớp Tuỳ chọn thích hợp trong đó. (If1886)
  • Chúng tôi đã thêm @JvmOverloads vào hàm khởi tạo của ListenableGlesRenderer để tăng khả năng tương tác bằng Java. (I2974a)

Sửa lỗi

  • Hàm khởi tạo của ListenableGlesRenderer hiện được đánh dấu chính xác là @Throws(GlesException::class). Do đó, bạn hiện có thể mở rộng lớp này trong Java. (Iac6d0)
  • Khắc phục lỗi tapAction PhotoImageComplicationData không được xử lý chính xác (I1cc30)

Phiên bản 1.1.0-alpha02

Ngày 12 tháng 1 năm 2022

Phát hành androidx.wear.watchface:watchface-*:1.1.0-alpha02. Phiên bản 1.1.0-alpha02 bao gồm các thay đổi sau.

Tính năng mới

  • Để hỗ trợ việc gỡ lỗi và kiểm thử, ComplicationData và các lớp con có liên quan hiện đã ghi đè mã băm, giá trị bằng và phương thức toString để giúp bạn dễ dàng xử lý hơn.

Thay đổi về API

  • Phương thức WatchfaceMetadataClient một lần nữa lại gửi RemoteExceptions khi thích hợp, giúp mã ứng dụng dễ dàng phát hiện lỗi trên mặt đồng hồ hơn. (I78785)
  • ComplicationData và các lớp con hiện có mã băm, giá trình bằng và phương thức toString. (I24bc6)

Phiên bản 1.1.0-alpha01

Ngày 15 tháng 12 năm 2021

Phát hành androidx.wear.watchface:watchface-*:1.1.0-alpha01. Phiên bản 1.1.0-alpha01 bao gồm các thay đổi sau.

Tính năng mới

  • Hiện tại, bạn có thể định nghĩa UserStyleSchemaComplicationSlots ở định dạng XML. Việc này giúp đơn giản hoá cấu trúc mặt đồng hồ. Ngoài ra, các lượt truy vấn WatchFaceMetadataClient nhanh hơn vì không cần liên kết với dịch vụ để lấy siêu dữ liệu. WatchFaceMetadataClientListenableWatchFaceMetadataClient không còn thử nghiệm nữa và sẽ trở thành một phần của API ổn định. Hệ thống có thể tuỳ ý hỗ trợ nhiều thực thể mặt đồng hồ, mỗi thực thể có các tuỳ chọn tạo kiểu riêng cho người dùng. Những lựa chọn này sẽ hiển thị trong bộ chọn mặt đồng hồ. Để sử dụng tính năng này, mặt đồng hồ phải bao gồm thẻ meta dữ liệu sau trong tệp kê khai.

        <meta-data
            android:name="androidx.wear.watchface.MULTIPLE_INSTANCES_ALLOWED"
            android:value="true" />
    
  • Một số mặt đồng hồ có trạng thái chưa được ghi lại trong UserStyle. Để hỗ trợ giải quyết vấn đề này và nhiều thực thể khác, mã thực thể của mặt đồng hồ hiện đã có sẵn qua WatchState.watchFaceInstanceId.

  • ComplicationData hiện đang được lưu vào bộ nhớ đệm để cho phép hiển thị các chức năng ngay khi tải. Đôi khi, ComplicationData được hệ thống lưu vào bộ nhớ đệm và đôi khi được các thư viện mặt đồng hồ chuyển đổi tuần tự. Khi tapAction được chuyển đổi tuần tự và liên kết sẽ bị mất, nếu điều này xảy ra, ComplicationData.tapActionLostDueToSerialization sẽ trả về true và mặt đồng hồ sẽ hiển thị chức năng theo cách khác (ví dụ: chuyển sang màu xám hoặc bán trong suốt) để thông báo rằng không thể nhấn vào đó. Hệ thống sẽ gửi ComplicationData đã cập nhật cùng với tapAction sớm nhất có thể.

  • Một số ComplicationData không nên lưu vào bộ nhớ đệm trong thời gian dài, để hỗ trợ việc này, chúng tôi đã thêm một tính năng khái quát hơn ComplicationDataTimeline. Bạn có thể dùng yếu tố này để cung cấp một trình tự ComplicationData có giới hạn thời gian gửi đến mặt đồng hồ. Trình tự này có thể được lưu vào bộ nhớ đệm và cập nhật tự động. Ví dụ: dự báo thời tiết hôm nay tại nhiều thời điểm hoặc nhiều sự kiện sắp tới trên lịch. ComplicationRequestListener đã được gia hạn bằng một phương thức onComplicationDataTimeline mới mà bạn có thể dùng để trả về dữ liệu này.

  • DefaultComplicationDataSourcePolicy đã được mở rộng để bạn có thể chỉ định ComplicationType cho nguồn dữ liệu chính và phụ.

  • Chúng tôi đã hỗ trợ thêm các trình cung cấp chức năng đồng bộ mà chức năng được cập nhật ở tần suất cao hơn bình thường, lên đến một lần/giây khi mặt đồng hồ hiển thị và không có môi trường xung quanh. Lưu ý: các trình cung cấp chức năng đồng bộ có thể hạn chế sử dụng do lo ngại về áp lực bộ nhớ.

  • Các thay đổi của PendingIntentTapListener có thể bị huỷ bỏ vì chúng tôi đã khắc phục sự cố liên quan xảy ra (tức là mặt đồng hồ không thể khởi chạy các hoạt động trong 5 giây sau khi nhấn vào nút màn hình chính) trong khung.

Thay đổi về API

  • ComplicationData.isCached đã được thay đổi thành tapActionLostDueToSerialization để hữu ích hơn khi xác định xem có nên hiển thị khu vực hiển thị chức năng khác nhau để thông báo rằng không thể nhấn vào đó hay không. (I6de2f)
  • Đã thêm ComplicationDataTimeline vào wear-complication-data-source. Bạn có thể dùng yếu tố này để cung cấp một trình tự ComplicationData có giới hạn thời gian gửi đến mặt đồng hồ. Trình tự này có thể được lưu vào bộ nhớ đệm và cập nhật tự động. Ví dụ: dự báo thời tiết hôm nay tại nhiều thời điểm hoặc nhiều sự kiện sắp tới trên lịch. ComplicationRequestListener đã được gia hạn bằng một phương thức onComplicationDataTimeline mới mà bạn có thể dùng để trả về dữ liệu này. Có một trình bao bọc Kotlin mới SuspendingTimelineComplicationDataSourceService để tạm ngưng các dịch vụ nguồn dữ liệu. (Idecdc)
  • Thêm PendingIntentTapListenerWatchFaceControlClient.getPendingIntentForTouchEvent. Điều này có thể giúp mặt đồng hồ cần khởi chạy ý định để phản hồi các lượt nhấn nhằm khắc phục sự cố khiến khung chặn khởi chạy hoạt động mới trong 5 giây sau khi nhấn vào nút màn hình chính. (I98074)
  • Giới thiệu bộ nhớ đệm ComplicationData cho mỗi mặt đồng hồ. Mục đích bộ nhớ đệm này là cho phép mặt đồng hồ hiển thị các giá trị dữ liệu chức năng đã biết gần đây nhất khi tải cho đến khi hệ thống có cơ hội cập nhật các giá trị đó. Có một phương thức API mới WatchFaceControlClient.hasComplicationCache dành cho các OEM (Nhà sản xuất thiết bị gốc). Điều này có thể ảnh hưởng đến chiến lược của hệ thống để gửi các chức năng phức tạp đến mặt đồng hồ. Ngoài ra, ComplicationData có một thuộc tính isCached và bạn nên hiển thị các chức năng đã lưu vào bộ nhớ đệm theo cách khác vì tapAction không thể lưu vào bộ nhớ đệm và sẽ là null trong một chức năng đã lưu vào bộ nhớ đệm. (I404b0)
  • Mã bản sao của mặt đồng hồ hiện đã có trong WatchState.watchFaceInstanceId. Hầu hết các mặt đồng hồ sẽ không cần sử dụng mã này. Tuy nhiên, nếu trạng thái mặt đồng hồ không được lưu trữ trong Giản đồ thì đây là khoá nên dùng để xác định thực thể mặt đồng hồ. Để hỗ trợ yếu tố này, giờ đây, bạn có thể cung cấp mã khi gọi WatchFaceControlClient.createHeadlessWatchFaceClient. (I1ff98)
  • Mở rộng DefaultComplicationDataSourcePolicy với khả năng đặt ComplicationTypes mặc định cho trình cung cấp chính, phụ và trình cung cấp hệ thống dự phòng. ComplicationSlot.defaultDataSourceType hiện không dùng nữa. (If0ce3)
  • ComplicationSlot.configExtras hiện có thể thay đổi và cập nhật trước khi gọi EditorSession.openComplicationDataSourceChooser(). (I6f852)
  • Thêm WatchFace.setComplicationDeniedDialogIntentsetComplicationRationaleDialogIntent. Các ý định này được triển khai để hiển thị hộp thoại lý do trước khi yêu cầu các quyền về chức năng, đồng thời một hộp thoại khác giải thích rằng người dùng cần có quyền sử dụng chức năng khi chỉnh sửa chức năng nhưng quyền lại bị từ chối (trình chọn nhà cung cấp sẽ không mở được nên cần có hộp thoại). (I3a29c)
  • Hiện tại, bạn có thể định nghĩa UserStyleSchemaComplicationSlots ở định dạng XML. Việc này giúp đơn giản hoá cấu trúc mặt đồng hồ và giúp WatchFaceMetadataClient truy vấn nhanh hơn vì không cần liên kết với dịch vụ để lấy siêu dữ liệu. (I85bfa)
  • Thêm InteractiveWatchFaceClient.supportsPendingIntentForTouchEvent để ứng dụng có thể xác định xem mặt đồng hồ có hỗ trợ getPendingIntentForTouchEvent hay không. (I0b917)
  • WatchFaceMetadataClientListenableWatchFaceMetadataClient không còn thử nghiệm nữa. Bạn có thể sử dụng các yếu tố này để lấy siêu dữ liệu mặt đồng hồ một cách hiệu quả (khi có thể) mà không cần mở một trình liên kết với mặt đồng hồ. (Ibb827)
  • Hỗ trợ thêm các nhà cung cấp chức năng đồng bộ hoá khi chức năng được cập nhật ở tần suất cao hơn bình thường, lên đến một lần mỗi giây khi mặt đồng hồ hiển thị và không có môi trường xung quanh. Để sử dụng thẻ này, trình cung cấp phải đưa thẻ siêu dữ liệu androidx.wear.watchface.complications.data.source.SYNCHRONOUS_UPDATE_PERIOD_SECONDS mới vào tệp kê khai và ghi đè onSynchronousComplicationRequest. Tuỳ thuộc vào bản chất của nguồn dữ liệu, bạn cũng có thể cần ghi đè onStartSynchronousComplicationRequestsonStopInteractiveComplicationRequests để nhận được thông báo khi chức năng này chuyển sang và thoát khỏi chế độ tương tác. (I8fe9d)

Phiên bản 1.0

Phiên bản 1.0.1

Ngày 9 tháng 2 năm 2022

Phát hành androidx.wear.watchface:watchface-*:1.0.1. Phiên bản 1.0.1 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục lỗi tapAction PhotoImageComplicationData không được xử lý chính xác (I1cc30)

Phiên bản 1.0.0

Ngày 1 tháng 12 năm 2021

Phát hành androidx.wear.watchface:watchface-*:1.0.0. Phiên bản 1.0.0 bao gồm các thay đổi sau.

Các tính năng chính của phiên bản 1.0.0

Gói androidx.wear.watchface là thư viện đề xuất mới để phát triển mặt đồng hồ WearOS. Thư viện này có một số tính năng mới so với Thư viện hỗ trợ cũ dành cho thiết bị đeo.

  • Thư viện hỗ trợ trực tiếp việc tạo kiểu cho người dùng, ví dụ: thay đổi bảng màu, kiểu kim đồng hồ, kiểu dấu giờ, v.v. (xem androidx.wear.watchface.style). Giờ đây, việc phát triển trình chỉnh sửa trên mặt đồng hồ bằng cách sử dụng androidx.wear.watchface.editor sẽ dễ dàng hơn và bạn có thể chỉnh sửa mặt đồng hồ qua ứng dụng đồng hành hệ thống mà không cần viết thêm mã.
  • Các phương pháp hay nhất đã được áp dụng. Thư viện này sẽ tự động tạo nhãn nội dung trình đọc màn hình cho chức năng (bạn cũng có thể thêm nhãn của riêng mình) và tốc độ khung hình tự động giảm khi pin yếu và đang không cắm sạc, giúp cải thiện thời lượng pin.
  • Cần ít mã hơn để phát triển mặt đồng hồ, đặc biệt đối với những chức năng có nhiều mẫu soạn sẵn đã được chuyển vào thư viện.

Sửa lỗi

  • Sửa EditorSession.userStyle.compareAndSet (I6f676)
  • Khắc phục lỗi chậm trễ rất ngắn đối với mặt đồng hồ (Iffb97)
  • Điều phối InteractiveWatchFaceImpl.onDestroy trên chuỗi giao diện người dùng (I83340)
  • Khắc phục một số sự cố với broadcast receiver (I7d25f)

Phiên bản 1.0.0-rc01

Ngày 3 tháng 11 năm 2021

Phát hành androidx.wear.watchface:watchface-*:1.0.0-rc01. Phiên bản 1.0.0-rc01 bao gồm các thay đổi sau.

Sửa lỗi

  • Khắc phục sự cố dump() (do adb shell dumpsys gọi) bị hỏng do di chuyển luồng. (087cf9e)

  • Đảm bảo thứ tự đúng của writeDirectBootPrefs. Chúng ta muốn writeDirectBootPrefs luôn chạy sau initStyleAndComosss, nếu không thì có nguy cơ trì hoãn sự khởi tạo chuỗi giao diện người dùng.(37650ac)

  • Đảm bảo Renderer.onDestroy được gọi. Trong trường hợp trình kết xuất đã được tạo nhưng sự khởi tạo WF chưa hoàn tất và Engine.onDestroy được gọi, chúng ta cần gọi Renderer.onDestroy. (f9952dc)

  • Tối ưu hoá/khắc phục sự cố isBatteryLowAndNotCharging. Bản vá này di chuyển cách thiết lập ban đầu của isBatteryLowAndNotCharging trước đó, nghĩa là bạn có thể thực hiện song song với createWatchFace. Ngoài ra, bây giờ chúng ta còn nghe ACTION_POWER_DISCONNECTED. (ddffd80

  • InteractiveWatchFaceClientImpl.isConnectionAlive đặt thành false sau khi đóng (ab9774e)

Phiên bản 1.0.0-beta01

Ngày 27 tháng 10 năm 2021

Phát hành androidx.wear.watchface:watchface-*:1.0.0-beta01. Phiên bản 1.0.0-beta01 bao gồm các thay đổi sau.

Phiên bản 1.0.0-alpha24

Ngày 13 tháng 10 năm 2021

Phát hành androidx.wear.watchface:watchface-*:1.0.0-alpha24. Phiên bản 1.0.0-beta24 bao gồm các thay đổi sau.

Thay đổi về API

  • Các lớp trong gói androidx.wear.watchface.complications đã được chuyển sang dự án wear:watchface:watchface-complications mới. Lưu ý rằng bạn không thể đưa thư viện này cũng như bất kỳ phiên bản alpha trước đó nào của wear:watchface:watchface-complications-data vào vì bạn sẽ gặp lỗi về các lớp trùng lặp. (I97195)
  • Renderer.dump đổi tên thành Renderer.onDump và được chú thích bằng @UiThread. (I44845)
  • InteractiveWatchFaceClient.addWatchFaceReadyListener đã đổi tên thành addOnWatchFaceReadyListenerremoveWatchFaceReadyListener đã đổi tên thành removeOnWatchFaceReadyListener. (I48fea)
  • EditorSession getComplicationsPreviewDatagetComplicationsDataSourceInfo không còn là các hàm tạm ngưng nữa, giờ đây chúng là các thuộc tính StateFlow<> có giá trị ban đầu rỗng. Trong ListenableEditorSession, getListenableComplicationPreviewDatagetListenableComplicationsProviderInfo đã bị xoá, thay vào đó là các đối tượng StateFlow<> mới từ lớp cơ sở. Nếu bạn cần nghe các thay đổi trong mã JavaScript, hãy xem xét sử dụng androidx.lifecycle.FlowLiveDataConversions.asLiveData để chuyển đổi thành LiveData<>. (Ic5483)

Phiên bản 1.0.0-alpha23

Ngày 29 tháng 9 năm 2021

Phát hành androidx.wear.watchface:watchface-*:1.0.0-alpha23. Phiên bản 1.0.0-alpha23 bao gồm các thay đổi sau.

Tính năng mới

Thư viện mặt đồng hồ giờ đây là một nhóm thư viện, do đó, các thư viện đã di chuyển và bạn cần cập nhật các mục nhập gradle như sau:

Mới
androidx.wear:wear-complications-data androidx.wear.watchface:watchface-complications-data
androidx.wear:wear-complications-data-source androidx.wear.watchface:watchface-complications-data-source
androidx.wear:wear-watchface androidx.wear.watchface:watchface
androidx.wear:wear-watchface-complications-rendering androidx.wear.watchface:watchface-complications-rendering
androidx.wear:wear-watchface-client androidx.wear.watchface:watchface-client
androidx.wear:wear-watchface-client-guava androidx.wear.watchface:watchface-client-guava
androidx.wear:wear-watchface-data androidx.wear.watchface:watchface-data
androidx.wear:wear-watchface-editor androidx.wear.watchface:watchface-editor
androidx.wear:wear-watchface-editor-guava androidx.wear.watchface:watchface-editor-guava
androidx.wear:wear-watchface-guava androidx.wear.watchface:watchface-guava
androidx.wear:wear-watchface-style androidx.wear.watchface:watchface-style

Thay đổi về API

  • Di chuyển các thư viện androidx.wear và mặt đồng hồ riêng sang nhóm thư viện androidx.wear.watchface. (b25f3c0)
  • Thêm EditorRequest.canWatchFaceSupportHeadlessEditing để cho ứng dụng biết trình chỉnh sửa mặt đồng hồ có hỗ trợ tính năng chỉnh sửa không có giao diện người dùng hay không. Xin lưu ý rằng sẽ có một số thông tin âm tính giả về vấn đề này vì sự hỗ trợ đã được thêm vào asop/1756809. Tuy nhiên, yếu tố sẽ trả về giá trị chính xác cho tất cả mặt đồng hồ trong tương lai. (ca55590)
  • Trình kết xuất hiện có một phương thức dump() có thể được ghi đè để thêm dữ liệu tuỳ chỉnh vào thông tin do WatchFaceService dịch vụ hoạt động ABD shell dumpsys tạo. (95235f9)
  • InteractiveWatchFaceClient.addWatchFaceReadyListener hiện chỉ định trình thực thi trước tiên. (563ac2f)
  • StateFlowCompatHelper đã bị xoá. Bạn nên sử dụng asLiveData (androidx.lifecycle.asLiveData). (bd35d3)
  • CurrentUserStyleRepository.userStyle sẽ không thể thay đổi nữa. (I44889)
  • Đổi tên WatchFaceReadyListener thành OnWatchFaceReadyListener. (Ic12a9)

Sửa lỗi

  • InteractiveInstanceManager.deleteInstance để gọi onDestroy. Điều này là cần thiết để đảm bảo InteractiveWatchFaceImpl được thu thập rác.(fce4af8, b/199485839)