こちらと同じことを行いました。
いまさらWorkManager〜基本編①(必要最小限で実装:1回のみの実行)
プロジェクトの作成
プロジェクト名を work01 としました。
環境設定
app/build.gradle.kts
(省略)
dependencies {
implementation("androidx.work:work-runtime-ktx:2.8.0")
(省略)
画面
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<Button
android:id="@+id/buttonStart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="WorkManagerスタート"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
プログラム
MainActivity.kt
package com.example.work01
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import androidx.work.OneTimeWorkRequest
import androidx.work.WorkManager
class MainActivity : AppCompatActivity() {
private val manager = WorkManager.getInstance()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val buttonStart = findViewById<Button>(R.id.buttonStart)
buttonStart.setOnClickListener {
println("*** clicked ***")
val request = OneTimeWorkRequest.from(MyWorker::class.java)
manager.enqueue(request)
}
}
}
MyWorker.kt
package com.example.work01
import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.os.Build
import androidx.core.app.NotificationCompat
import androidx.work.Worker
import androidx.work.WorkerParameters
class MyWorker(ctx: Context, params: WorkerParameters) : Worker(ctx, params) {
val notificationManager =
applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
// カテゴリー名(通知設定画面に表示される情報)
val name = "通知のタイトル的情報を設定"
// システムに登録するChannelのID
val id = "casareal_chanel"
// 通知の詳細情報(通知設定画面に表示される情報)
val notifyDescription = "この通知の詳細情報を設定します"
init {
// Channelの取得と生成
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
notificationManager.getNotificationChannel(id) == null
val mChannel = NotificationChannel(id, name, NotificationManager.IMPORTANCE_HIGH)
mChannel.apply {
description = notifyDescription
}
notificationManager.createNotificationChannel(mChannel)
}
}
override fun doWork(): Result {
repeat(10) {
val notification = NotificationCompat.Builder(applicationContext,id).apply {
setContentText("${it}回目のメッセージ")
setSmallIcon(R.drawable.ic_launcher_background)
println("${it}回目のメッセージ")
}
notificationManager.notify(1, notification.build())
Thread.sleep(2000)
}
return Result.success()
}
}