Thực hành: Ứng dụng Water Me!

1. Trước khi bắt đầu

Giới thiệu

Trong bài học này, bạn đã tìm hiểu về WorkManager, đây là một thư viện Jetpack dành cho công việc (work) có thể trì hoãn ở chế độ nền. Công việc trong nền này sẽ luôn chạy ngay cả khi bạn đóng ứng dụng nguồn.

Trong quá trình tìm hiểu về WorkManager, bạn đã học cách xác định công việc trong lớp Worker, cách tạo WorkRequest cho Worker, cách thêm công việc vào hàng đợi cũng như lên lịch cho công việc.

Trong bộ bài tập thực hành này, bạn sẽ áp dụng các khái niệm đã học để cải thiện ứng dụng Water Me!.

Chúng tôi sẽ cung cấp mã giải pháp ở phần cuối. Để khai thác tối đa trải nghiệm học tập này, bạn hãy cố gắng triển khai và khắc phục sự cố nhiều nhất có thể trước khi xem mã giải pháp chúng tôi cung cấp. Chính trong thời gian thực hành này, bạn sẽ học được nhiều kiến thức nhất.

Điều kiện tiên quyết

Bạn cần có

  • Máy tính có kết nối Internet và Android Studio

Sản phẩm bạn sẽ tạo ra

Trong bộ bài tập thực hành này, bạn sẽ áp dụng các khái niệm đã học để cải thiện ứng dụng Water Me!.

Ứng dụng hiện cho thấy danh sách cây ở dạng cuộn. Khi bạn nhấn vào một cây, ứng dụng sẽ cho phép bạn thiết lập lời nhắc tưới cây.

fb69d6519999f217.png d6b68d1e9f1026c5.png

Tuy bạn có thể chọn khung thời gian nhắc, nhưng thông báo nhắc sẽ không xuất hiện.

Việc của bạn là triển khai công việc ở chế độ nền để thông báo nhắc xuất hiện.

Sau khi bạn hoàn tất đoạn mã, ứng dụng có thể cho thấy thông báo nhắc sau khi khoảng thời gian đã chọn kết thúc.

a8f9bceed83af5a9.png

2. Lấy đoạn mã khởi đầu

Để bắt đầu, hãy tải mã khởi đầu xuống:

Ngoài ra, bạn có thể sao chép kho lưu trữ GitHub cho đoạn mã:

$ git clone https://github.com/google-developer-training/basic-android-kotlin-compose-training-waterme.git
$ cd basic-android-kotlin-compose-training-waterme
$ git checkout starter

Bạn có thể duyệt xem mã của ứng dụng Water Me! trong kho lưu trữ GitHub này.

Chạy mã khởi đầu

Để làm quen với mã khởi đầu, hãy hoàn thành các bước sau:

  1. Mở dự án bằng mã khởi đầu trong Android Studio.
  2. Chạy ứng dụng trên thiết bị Android hoặc trình mô phỏng.

Giờ bạn đã sẵn sàng bắt đầu lập trình!

3. Lên lịch gửi thông báo bằng WorkManager

Chức năng của ứng dụng Water Me! đã được triển khai hầu hết, ngoại trừ tính năng lên lịch thông báo nhắc.

Mã để tạo thông báo nằm trong tệp WaterReminderWorker.kt, trong gói worker. Lớp WaterReminderWorker mở rộng lớp CoroutineWorker và mã để tạo thông báo nằm bên trong phương thức doWork().

Do thông báo có thể là một chủ đề mới cho bạn, mã này đã hoàn tất.

override suspend fun doWork(): Result {

    val plantName = inputData.getString(nameKey)

    makePlantReminderNotification(
        applicationContext.resources.getString(R.string.time_to_water, plantName),
        applicationContext
    )

    return Result.success()
}

Nhiệm vụ của bạn là tạo OneTimeWorkRequest để gọi phương thức này với các tham số chính xác từ WorkManagerWaterRepository.

Để được trợ giúp thêm, hãy tham khảo lớp học lập trình Làm việc ở chế độ nền bằng WorkManager.

Tạo yêu cầu công việc

Để lên lịch thông báo, bạn cần triển khai phương thức scheduleReminder() trong tệp WorkManagerWaterRepository.kt.

  1. Tạo biến có tên data bằng Data.Builder. Dữ liệu cần bao gồm một giá trị chuỗi đơn, trong đó WaterReminderWorker.nameKey là khoá và plantName được truyền vào scheduleReminder() là giá trị.
  2. Tạo yêu cầu công việc một lần bằng lớp WaterReminderWorker. Sử dụng durationunit được truyền vào hàm scheduleReminder(), đồng thời đặt dữ liệu đầu vào thành biến dữ liệu mà bạn tạo.
  3. Gọi phương thức enqueueUniqueWork() của workManager. Truyền tên cây được nối với thời lượng, sử dụng REPLACE làm ExistingWorkPolicy và đối tượng yêu cầu công việc.

Lúc này ứng dụng của bạn hoạt động như dự kiến.

4. Thử thách khác (không bắt buộc)

Để thực hành lập trình thêm, hãy thay đổi các tuỳ chọn thời lượng thành như sau:

  • 5 giây
  • 1 phút
  • 2 phút
  • 3 phút

Sau khi bạn hoàn tất, hãy kiểm tra từng thời lượng để xác nhận rằng thời lượng đó hoạt động như mong đợi.

5. Lấy đoạn mã giải pháp

Để tải mã này xuống khi lớp học lập trình đã kết thúc, bạn có thể sử dụng các lệnh sau:

$ git clone https://github.com/google-developer-training/basic-android-kotlin-compose-training-waterme.git
$ cd basic-android-kotlin-compose-training-waterme
$ git checkout main

Ngoài ra, bạn có thể tải kho lưu trữ xuống dưới dạng tệp ZIP, sau đó giải nén rồi mở trong Android Studio.

Nếu bạn muốn tham khảo đoạn mã giải pháp cho lớp học lập trình này, hãy xem trên GitHub.