Dự án: Ứng dụng Water Me!

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

Lớp học lập trình này giới thiệu một ứng dụng mới có tên là Water Me (Tưới nước) mà bạn sẽ tự mình xây dựng. Trong lớp học lập trình này, bạn sẽ được hướng dẫn từng bước để hoàn thành dự án xây dựng ứng dụng Water Me, bao gồm quá trình thiết lập và kiểm thử dự án trong Android Studio.

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

  • Dự án này dành cho những học viên đã hoàn thành Bài 6 trong khoá học Kotlin cơ bản cho Android.

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

  • Lên lịch thông báo bằng Worker tuỳ chỉnh trong một ứng dụng hiện có.

Bạn cần có

  • Một máy tính đã cài đặt Android Studio.

2. Tổng quan về ứng dụng hoàn thiện

Ứng dụng Water Me! bao gồm danh sách, một số thông tin và mô tả về tần suất tưới các loại cây. Đối với mỗi loại cây, ứng dụng hoàn thiện sẽ lên lịch nhắc về thời điểm tưới cây.

90be029855bc3111.png

Lời nhắc sẽ được hiển thị dưới dạng thông báo trên thiết bị, ngay cả khi ứng dụng Water Me! đang không được chạy. Nhấn vào thông báo sẽ mở ứng dụng Water Me!.

df244d6749f69085.png

Để chức năng này hoạt động, nhiệm vụ của bạn là lên lịch cho một nhiệm vụ trong nền bằng Worker tuỳ chỉnh để hiện thông báo.

3. Bắt đầu

Tải mã dự án xuống

Lưu ý tên thư mục là android-basics-kotlin-water-me-app. Chọn thư mục này khi bạn mở dự án trong Android Studio.

Để lấy mã nguồn cho lớp học lập trình này và mở đoạn mã đó trong Android Studio, hãy thực hiện các bước sau.

Lấy mã

  1. Nhấp vào URL được cung cấp. Thao tác này sẽ mở trang GitHub của dự án trong một trình duyệt.
  2. Trên trang GitHub của dự án, hãy nhấp vào nút Code (Mã), một hộp thoại sẽ xuất hiện.

5b0a76c50478a73f.png

  1. Trong hộp thoại này, hãy nhấp vào nút Download ZIP (Tải tệp ZIP xuống) để lưu dự án vào máy tính. Chờ quá trình tải xuống hoàn tất.
  2. Xác định vị trí của tệp trên máy tính (thường nằm trong thư mục Downloads (Tệp đã tải xuống)).
  3. Nhấp đúp vào tệp ZIP để giải nén. Thao tác này sẽ tạo một thư mục mới chứa các tệp dự án.

Mở dự án trong Android Studio

  1. Khởi động Android Studio.
  2. Trong cửa sổ Welcome to Android Studio (Chào mừng bạn đến với Android Studio), hãy nhấp vào Open an existing Android Studio project (Mở một dự án hiện có trong Android Studio).

36cc44fcf0f89a1d.png

Lưu ý: Nếu Android Studio đã mở sẵn thì thay vào đó, hãy chọn tuỳ chọn sau đây trong trình đơn File > New > Import Project (Tệp > Mới > Nhập dự án).

21f3eec988dcfbe9.png

  1. Trong hộp thoại Import Project (Nhập dự án), hãy chuyển đến nơi chứa thư mục dự án đã giải nén (thường nằm trong thư mục Downloads (Tệp đã tải xuống)).
  2. Nhấp đúp vào thư mục dự án đó.
  3. Chờ Android Studio mở dự án.
  4. Nhấp vào nút Run (Chạy) 11c34fc5e516fb1c.png để xây dựng và chạy ứng dụng. Hãy đảm bảo ứng dụng được dựng như mong đợi.
  5. Duyệt qua các tệp dự án trong cửa sổ công cụ Project (Dự án) để xem cách ứng dụng được thiết lập.

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

Tất cả các chức năng của ứng dụng Water Me! đã được triển khai, ngoại trừ phần lên lịch và gửi thông báo. Mã để hiển thị thông báo nằm trong WaterReminderWorker.kt (trong gói worker (người làm)). Điều này xảy ra trong phương thức doWork() của một lớp Worker tuỳ chỉnh. Do thông báo có thể là một chủ đề mới, mã này đã được triển khai.

override fun doWork(): Result {
    val intent = Intent(applicationContext, MainActivity::class.java).apply {
        flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
    }

    val pendingIntent: PendingIntent = PendingIntent
        .getActivity(applicationContext, 0, intent, 0)

    val plantName = inputData.getString(nameKey)

    val builder = NotificationCompat.Builder(applicationContext, BaseApplication.CHANNEL_ID)
        .setSmallIcon(R.drawable.ic_android_black_24dp)
        .setContentTitle("Water me!")
        .setContentText("It's time to water your $plantName")
        .setPriority(NotificationCompat.PRIORITY_HIGH)
        .setContentIntent(pendingIntent)
        .setAutoCancel(true)

    with(NotificationManagerCompat.from(applicationContext)) {
        notify(notificationId, builder.build())
    }

    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 thông số chính xác từ PlantViewModel.

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

Để lên lịch gửi thông báo, bạn cần triển khai phương thức scheduleReminder() trong PlantViewModel.kt.

  1. Tạo biến có tên data bằng Data.Builder. Dữ liệu phải bao gồm một giá trị chuỗi đơn, trong đó WaterReminder.Worker.nameKey là khoá và plantName đã được chuyển vào scheduleReminder() là giá trị.
  2. Tạo yêu cầu công việc một lần bằng WaterReminderWorker, sử dụng delayunit được truyền vào hàm scheduleReminder() và đặt dữ liệu đầu vào vào biến data mà bạn đã tạo.
  3. Gọi phương thức enqueueUniqueWork() của workManager, chuyển qua tên cây, sử dụng REPLACE làm ExistingWorkPolicy và 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. Do mỗi lời nhắc sẽ mất nhiều thời gian để hiển thị, bạn nên chạy các kiểm thử kèm theo để xác minh thông báo hoạt động như mong đợi.

5. Hướng dẫn kiểm thử

Chạy kiểm thử

Để chạy kiểm thử, bạn có thể làm theo một trong những cách sau:

Với trường hợp kiểm thử đơn lẻ, mở một lớp trường hợp kiểm thử và nhấp vào mũi tên xanh lá ở phía bên trái phần khai báo lớp. Sau đó, chọn tuỳ chọn Run (Chạy) trên trình đơn. Thao tác này sẽ chạy toàn bộ chương trình kiểm thử trong trường hợp kiểm thử.

a32317d35c77142b.png

Thông thường, bạn sẽ chỉ muốn chạy một chương trình kiểm thử, chẳng hạn như khi một kiểm thử không đạt còn các kiểm thử khác thì đạt. Bạn có thể chạy một kiểm thử duy nhất tương tự như cách thực hiện trên toàn bộ trường hợp kiểm thử. Sử dụng mũi tên màu xanh lục rồi chọn tuỳ chọn Run (Chạy).

ac6244434cfafb60.png