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 10 tháng 8 năm 2022 1.1.1 - - 1.2.0-alpha01

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 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.2.0-alpha01"

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

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

    // 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.2.0-alpha01"
}

Kotlin

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

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

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

    // 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.2.0-alpha01"
}

Để 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-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 nhưng không ảnh hưởng làm đến quá trình kết xuất. Trừ khi được chỉ định (trong mã hoặc qua XML), ComplciationSlots có lề 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. Đã xảy ra lỗi khi trả về giá trị rỗng trước đây, và 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 đã xóa ValueType thử nghiệm khỏi RangedValueComplicationData, đồng thời thay vào đó giới thiệu 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 đã giới thiệu 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 đã xóa 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 độ đậm và màu sắc) cùng với văn bản/tiêu đề/hình ảnh không bắt buộc. Những màu này có thể được hiển thị 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)
  • ColorRamps thử nghiệm mà RangedValueComplicationDataGoalProgressComplicationData sử dụng (không bắt buộc) hiện cho phép bạn chỉ định một chuỗi gồm tối đa 7 màu và một 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 tọa độ 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 chạy 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 đó. Rất tiếc, pendingInitialComplications được áp dụng quá sớm, nghĩa là có một thời lượng kết xuất cửa sổ trong khi khởi chạy mặt đồng hồ, nơi các vùng 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 trong đó ComplicationRenderer đã nhầm lẫn khi cố tải các trình 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, bản vá này khắc phục một lỗi lý thuyết với hy vọng 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ữ khóa 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 khóa, 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 hủy các CoroutineScopes cơ bản 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ó 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 tùy 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.
  • Có hỗ trợ tùy 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 ID 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à người dùng 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.
  • Giờ đây, khi chỉnh sửa 2 phiên bản của mặt đồng hồ, các phiên bản mặt đồng hồ đã có thể chia sẻ tài nguyên và 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 hóa 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 cung cấp cho drawHighlight thử nghiệm với các vùng chức năng cạnh BoundingArc mặc dù bạn không nên sử dụng thử nghiệm tại 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 (tức là 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 đồng bộ. Vấn đề với BaseEditorSession.close không đồng bộ là do chúng tôi hủy bỏ ComplicationDataSourceInfoRetriever quá muộn dẫn đến cảnh báo spam 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 các tùy chọn cài đặt trong UserStyleSetting XML. Nó cho phép bạn giảm độ chi tiết và chia sẻ tùy chọn 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 có nghĩa là TimeLineEntries đã lưu vào bộ nhớ đệm của loại NoData sẽ bị diễn giải là loại có chức năng mẹ dẫn đến NPE khi các trường bắt buộc không tồn tại. (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 lưới 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ũ không có mục đích 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 Tư, 2022

Phát hành androidx.wear.watchface:watchface-*:1.1.0-beta01. Phiên bản 1.1.0-beta01 chứa các thao tác lưu trữ thay đổi này.

Thay đổi về API

  • Giờ đây, các phương thức WatchFaceMetadataClient (getUserStyleSchema, getComplicationSlotMetadataMap, getUserStyleFlavors) và HeadlessWatchFaceClient.getUserStyleFlavors sẽ gửi chế độ chạy môi trường thời gian chạy chưa chọn thay vì WatchFaceException. (I0718a)
  • WatchFaceMetadataClient.WatchFaceException đã được di chuyển khỏi lớp học để 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 để tùy chỉnh giao diện hiển thị phức tạp. (I44a73)

Thay đổi về API

  • Renderer.CanvasRendererRenderer.GlesRenderer đã ngừng hoạt động, thay vào đó là Renderer.CanvasRenderer2Renderer.GlesRenderer2 hỗ trợ SharedAssets. Các phương thức này được chuyển sang phương thức hiển thị. Đối với tính 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 hương vị cho @WatchFaceFlavorsExperimental – danh sách các mặt đồng hồ được định cấu hình sẵn (I04dd0)
  • Renderer.sharedAssets hiện là một StateFlow và chúng tôi đã xóa 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 để cho phép HeadlessWatchFaceClient tránh chi phí tương đối thấp khi chuyể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 nếu và chỉ khi UserStyleSchema có thể dựa vào để không thay đổi trừ khi 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à trình chỉnh sửa mặt đồng hồ chỉ sử dụng riê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ụ: ComversionData đã 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 trong bối cảnh của 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 sự 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ỳ chế độ 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 đã giới thiệu 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à 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à thử nghiệm, ComplicationData và các lớp con có liên quan hiện đã ghi đè mã băm, giá trình 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 chứa những cam kết này.

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 lưu vào bộ nhớ đệm trong hệ thống và đôi khi, yếu tố này đượ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ị hủy 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 thế.

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ố trong đó khung chặn 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ẽ 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 quyền chức năng và một hộp thoại khác giải thích rằng người dùng cần có quyền 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ồ từ ứ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à không sạc để 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 tạm ngưng hàm nữa, thay vào đó đây 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)