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.
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!.
Để 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ã
- 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.
- 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.
- 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.
- 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)).
- 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
- Khởi động Android Studio.
- 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).
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).
- 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)).
- Nhấp đúp vào thư mục dự án đó.
- Chờ Android Studio mở dự án.
- Nhấp vào nút Run (Chạy) để xây dựng và chạy ứng dụng. Hãy đảm bảo ứng dụng được dựng như mong đợi.
- 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
.
- Tạo biến có tên
data
bằngData.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àoscheduleReminder()
là giá trị. - Tạo yêu cầu công việc một lần bằng
WaterReminderWorker
, sử dụngdelay
vàunit
được truyền vào hàmscheduleReminder()
và đặt dữ liệu đầu vào vào biếndata
mà bạn đã tạo. - Gọi phương thức
enqueueUniqueWork()
củaworkManager
, chuyển qua tên cây, sử dụngREPLACE
làmExistingWorkPolicy
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ử.
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).