facebook twitter hatena line email

「Android/kotlin/Notification」の版間の差分

提供: 初心者エンジニアの簡易メモ
移動: 案内検索
(ローカル通知)
(ローカル通知)
 
行9: 行9:
 
  + implementation 'androidx.core:core:1.12.0'
 
  + implementation 'androidx.core:core:1.12.0'
  
kotlin
+
MainActivity.kt から呼び出し
 
<pre>
 
<pre>
fun notification() {
+
NotificationUtil.sendNotification(this@MainActivity)
    val notificationId = 1
+
</pre>
    val channelId = "alarm_channel"
+
  
    // Android 13 以上の場合、通知権限の確認が必要
+
NotificationUtil.kt
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+
<pre>
        if (ActivityCompat.checkSelfPermission(
+
package com.example.myapplication
                this,
+
                Manifest.permission.POST_NOTIFICATIONS
+
            ) != PackageManager.PERMISSION_GRANTED
+
        ) {
+
            // 権限がなければリクエスト
+
            ActivityCompat.requestPermissions(
+
                this,
+
                arrayOf(Manifest.permission.POST_NOTIFICATIONS),
+
                1001 // リクエストコードは適当な値でOK
+
            )
+
            return // 権限が許可されるまで通知を表示しない
+
        }
+
    }
+
  
    // 通知チャネルの設定(Android 8.0以上)
+
import android.Manifest
    val notificationManager = NotificationManagerCompat.from(this)
+
import android.app.NotificationChannel
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+
import android.app.NotificationManager
        val channelName = "Alarm Channel"
+
import android.content.Context
        val channelDescription = "Channel for alarm notifications"
+
import android.content.pm.PackageManager
        val importance = NotificationManager.IMPORTANCE_HIGH // 通知の重要度をHIGHに設定
+
import android.os.Build
        val notificationChannel = NotificationChannel(channelId, channelName, importance).apply {
+
import androidx.core.app.ActivityCompat
            description = channelDescription
+
import androidx.core.app.NotificationCompat
        }
+
import androidx.core.app.NotificationManagerCompat
        notificationManager.createNotificationChannel(notificationChannel)
+
    }
+
  
    // 通知の作成
+
class NotificationUtil {
    val notification = NotificationCompat.Builder(this, channelId)
+
        .setSmallIcon(android.R.drawable.ic_notification_overlay) // 通知アイコン
+
        .setContentTitle("アラーム通知") // 通知タイトル
+
        .setContentText("指定した時間が経過しました!") // 通知内容
+
        .setPriority(NotificationCompat.PRIORITY_HIGH) // 優先度をHIGHに設定
+
        .setDefaults(NotificationCompat.DEFAULT_ALL) // サウンド、振動などのデフォルト動作
+
        .build()
+
  
     // 通知を表示
+
     companion object {
    notificationManager.notify(notificationId, notification)
+
        fun sendNotification(context: Context) {
 +
            val notificationId = 1
 +
            val channelId = "alarm_channel"
 +
 
 +
            // Android 13 以上の場合、通知権限の確認が必要
 +
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
 +
                if (ActivityCompat.checkSelfPermission(
 +
                        context,
 +
                        Manifest.permission.POST_NOTIFICATIONS
 +
                    ) != PackageManager.PERMISSION_GRANTED
 +
                ) {
 +
                    // 権限がなければリクエスト
 +
                    ActivityCompat.requestPermissions(
 +
                        context as MainActivity,
 +
                        arrayOf(Manifest.permission.POST_NOTIFICATIONS),
 +
                        1001 // リクエストコードは適当な値でOK
 +
                    )
 +
                    return // 権限が許可されるまで通知を表示しない
 +
                }
 +
            }
 +
 
 +
            // 通知チャネルの設定(Android 8.0以上)
 +
            val notificationManager = NotificationManagerCompat.from(context)
 +
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
 +
                val channelName = "Alarm Channel"
 +
                val channelDescription = "Channel for alarm notifications"
 +
                val importance = NotificationManager.IMPORTANCE_HIGH // 通知の重要度をHIGHに設定
 +
                val notificationChannel = NotificationChannel(channelId, channelName, importance).apply {
 +
                    description = channelDescription
 +
                }
 +
                notificationManager.createNotificationChannel(notificationChannel)
 +
            }
 +
 
 +
            // 通知の作成
 +
            val notification = NotificationCompat.Builder(context, channelId)
 +
                .setSmallIcon(android.R.drawable.ic_notification_overlay) // 通知アイコン
 +
                .setContentTitle("アラーム通知") // 通知タイトル
 +
                .setContentText("指定した時間が経過しました!") // 通知内容
 +
                .setPriority(NotificationCompat.PRIORITY_HIGH) // 優先度をHIGHに設定
 +
                .setDefaults(NotificationCompat.DEFAULT_ALL) // サウンド、振動などのデフォルト動作
 +
                .build()
 +
 
 +
            // 通知を表示
 +
            notificationManager.notify(notificationId, notification)
 +
        }
 +
    }
 
}
 
}
 
</pre>
 
</pre>

2024年9月12日 (木) 01:23時点における最新版

ローカル通知

通知が来るようになる。通知バーを見にいくと、新規通知が、追加されてることを確認。

AndoridManifest.xml

+ <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />


build.gradle

+ implementation 'androidx.core:core:1.12.0'

MainActivity.kt から呼び出し

NotificationUtil.sendNotification(this@MainActivity)

NotificationUtil.kt

package com.example.myapplication

import android.Manifest
import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.content.pm.PackageManager
import android.os.Build
import androidx.core.app.ActivityCompat
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat

class NotificationUtil {

    companion object {
        fun sendNotification(context: Context) {
            val notificationId = 1
            val channelId = "alarm_channel"

            // Android 13 以上の場合、通知権限の確認が必要
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
                if (ActivityCompat.checkSelfPermission(
                        context,
                        Manifest.permission.POST_NOTIFICATIONS
                    ) != PackageManager.PERMISSION_GRANTED
                ) {
                    // 権限がなければリクエスト
                    ActivityCompat.requestPermissions(
                        context as MainActivity,
                        arrayOf(Manifest.permission.POST_NOTIFICATIONS),
                        1001 // リクエストコードは適当な値でOK
                    )
                    return // 権限が許可されるまで通知を表示しない
                }
            }

            // 通知チャネルの設定(Android 8.0以上)
            val notificationManager = NotificationManagerCompat.from(context)
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                val channelName = "Alarm Channel"
                val channelDescription = "Channel for alarm notifications"
                val importance = NotificationManager.IMPORTANCE_HIGH // 通知の重要度をHIGHに設定
                val notificationChannel = NotificationChannel(channelId, channelName, importance).apply {
                    description = channelDescription
                }
                notificationManager.createNotificationChannel(notificationChannel)
            }

            // 通知の作成
            val notification = NotificationCompat.Builder(context, channelId)
                .setSmallIcon(android.R.drawable.ic_notification_overlay) // 通知アイコン
                .setContentTitle("アラーム通知") // 通知タイトル
                .setContentText("指定した時間が経過しました!") // 通知内容
                .setPriority(NotificationCompat.PRIORITY_HIGH) // 優先度をHIGHに設定
                .setDefaults(NotificationCompat.DEFAULT_ALL) // サウンド、振動などのデフォルト動作
                .build()

            // 通知を表示
            notificationManager.notify(notificationId, notification)
        }
    }
}