はじめに
DreamHanksのMOONです。
前回はPicassoについて説明しました。
22. 【Android/Kotlin】Picasso(イメージをロード)
今回は「Notification」という通知機能について説明していきます。
Notificationとは
Notificationは下記のイメージとみたいな通知メッセージを表示するための機能です。
通知形式の種類は多いですが、今回は基本的な通知メッセージを送ってみます。
Notification追加
通知するために下記の作業が必要です。
①NotificationのChannelを生成するためのメソッドを作成
②Notificationを登録するためのコードを作成
NotificationのChannelを生成するためのメソッドを作成
1 2 3 4 5 6 7 8 9 10 11 12 13 |
//通知のチャンネルを生成するためのメソッド private fun createNotificationChannel(context: Context, importance: Int, showBadge: Boolean, name: String, description: String) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val channelId = "${context.packageName}-$name" val channel = NotificationChannel(channelId, name, importance) channel.description = description channel.setShowBadge(showBadge) val notificationManager = context.getSystemService(NotificationManager::class.java) notificationManager.createNotificationChannel(channel) } } |
NotificationManager.createNotificationChannel()でチャネルを作成でき、チャネルID、チャネル名、チャネルの重要度で生成したNotificationChannelオブジェクトを因子として伝達します。
Notificationを登録するためのコードを作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
fun createNotification(notification_et : EditText) { createNotificationChannel(this, NotificationManagerCompat.IMPORTANCE_DEFAULT, false, getString(R.string.app_name), "App notification channel") // 1 val channelId = "$packageName-${getString(R.string.app_name)}" // 2 val title = "Notification Test" val content = notification_et.text val intent = Intent(baseContext, NotificationActivity::class.java) intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK val pendingIntent = PendingIntent.getActivity(baseContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT) // 3 val builder = NotificationCompat.Builder(this, channelId) // 4 builder.setSmallIcon(R.drawable.ic_launcher_foreground) // 5 builder.setContentTitle(title) // 6 builder.setContentText(content) // 7 builder.priority = NotificationCompat.PRIORITY_DEFAULT // 8 builder.setAutoCancel(true) // 9 builder.setContentIntent(pendingIntent) // 10 val notificationManager = NotificationManagerCompat.from(this) notificationManager.notify(1, builder.build()) // 11 } |
①Notificationチャンネルを作成していなければ作成します。
②チャネルを作成するときに使用したチャネル IDです。 Notification登録する時に必要です。
③PendingIntentです。 Notificationをタッチした時にアクティビティを実行するために必要です。
④Notificationを作成するBuilderです。 ここにchannelIdを印字に入れなければなりません。
⑤Notificationに見えるアイコンです。
⑥Notificationに見えるタイトルです。
⑦Notificationのタイトルの下に表示されるテキストです。
⑧Notificationの重要度を示します。 重要度によってはNotificationが見えない場合があります。
⑨AutoCancelがtrueなら、ユーザがNotificationをタッチしたときに消えるようにします。 falseなら押しても消えません。
⑩上で作成したPendingIntentをNotificationに登録します。
全体Activityコード
NotificationActivity.kt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
package com.example.practiceapplication import android.app.NotificationChannel import android.app.NotificationManager import android.app.PendingIntent import android.content.Context import android.content.Intent import android.os.Build import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import android.widget.Button import android.widget.EditText import androidx.core.app.NotificationCompat import androidx.core.app.NotificationManagerCompat class NotificationActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_notification) val notification_et = findViewById<EditText>(R.id.notification_et) //お知らせのEditText(入力エリア) val notification_btn = findViewById<Button>(R.id.notification_btn) //お知らせボタン //お知らせボタンのクリックイベントを設定 notification_btn.setOnClickListener { createNotification(notification_et) } } //お知らせメッセージを生成するためのメソッド private fun createNotificationChannel(context: Context, importance: Int, showBadge: Boolean, name: String, description: String) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val channelId = "${context.packageName}-$name" val channel = NotificationChannel(channelId, name, importance) channel.description = description channel.setShowBadge(showBadge) val notificationManager = context.getSystemService(NotificationManager::class.java) notificationManager.createNotificationChannel(channel) } } fun createNotification(notification_et : EditText) { createNotificationChannel(this, NotificationManagerCompat.IMPORTANCE_DEFAULT, false, getString(R.string.app_name), "App notification channel") // 1 val channelId = "$packageName-${getString(R.string.app_name)}" // 2 val title = "Notification Test" val content = notification_et.text val intent = Intent(baseContext, NotificationActivity::class.java) intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK val pendingIntent = PendingIntent.getActivity(baseContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT) // 3 val builder = NotificationCompat.Builder(this, channelId) // 4 builder.setSmallIcon(R.drawable.ic_launcher_foreground) // 5 builder.setContentTitle(title) // 6 builder.setContentText(content) // 7 builder.priority = NotificationCompat.PRIORITY_DEFAULT // 8 builder.setAutoCancel(true) // 9 builder.setContentIntent(pendingIntent) // 10 val notificationManager = NotificationManagerCompat.from(this) notificationManager.notify(1, builder.build()) // 11 } } |
レイアウトのxml
activity_notification.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<?xml version="1.0" encoding="utf-8"?> <LinearLayout 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" android:orientation="vertical" tools:context=".MainActivity" android:gravity="center"> <EditText android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/notification_et" android:inputType="text" android:hint="テキストを入力してください。"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/notification_btn" android:text="お知らせ"/> </LinearLayout> |
アプリ起動
・初期の画面(テキストを入力)
・ボタンをクリックした場合
終わりに
今回は「Notification」という通知機能について説明しました。
次回は「string-array」というタグについて説明していきます。
コメント