通知バーに通知を表示する NotificationCompatによる実装方法【Androidアプリ開発】

NotificationCompatを用いた、通知の実装方法を説明しています。

ここでは、テキストのみの通知や通知をタップしてアプリを起動するといった、通知機能の基本的な実装方法を説明しています。

通知の実装はAndroid8.0以上とそれ未満で一部異なりますが、ここで説明している方法であればどちらにも対応可能です。

通知の概要

通知機能を実装する場合、以下のような手順が必要です。

  1. 通知チャンネルの作成
  2. 通知オブジェクトの作成
  3. 通知の実施

特に「通知チャンネルの作成」は、Android8.0以上で必須となっているため、これがないとエラーとなります。また、「通知オブジェクトの作成」でも、一部の仕様が変わっているため、注意が必要です。

実装例

レイアウト

activity_main.xml

メインアクテビティのレイアウトです。

ボタンを押すと通知を実施するようにします。

レイアウト

実装方法

MainActivity.kt

最初に説明した通り、以下の順に行っています。

  1. 通知チャンネルの作成
  2. 通知オブジェクトの作成
  3. 通知の実施

実装のポイントは以下の点です。

  • 必ず最初に通知チャンネルを作成する。
    通知チャンネルが存在しない状態で、通知を実施するとエラーになる。
  • CHANNEL_IDで通知の関連付けを行っている。
    通知チャンネルと同じIDを指定して、通知を実施しないとエラーになる。

また、通知タップによりアプリ起動するため、Intentを作成して通知オブジェクトにセットしています。

class MainActivity : AppCompatActivity() {
val CHANNEL_ID = "sample"

//通知チャンネルの作成
private fun createNotificationChannel() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
val name = "name"
val descriptionText = "description"
val importance = NotificationManager.IMPORTANCE_DEFAULT
val channel = NotificationChannel(CHANNEL_ID, name, importance).apply {
description = descriptionText
}
// Register the channel with the system
val notificationManager: NotificationManager =
getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.createNotificationChannel(channel)
}
}

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)

//通知を作成する前に必ず実行する
createNotificationChannel()

//通知を作成するボタン
val buttonNotification: Button = findViewById(R.id.buttonNotification)
buttonNotification.setOnClickListener {
// 通知タップ時の遷移先を設定
val intent = Intent(this, MainActivity::class.java).apply {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
val pendingIntent: PendingIntent = PendingIntent.getActivity(this, 0, intent, 0)

//通知オブジェクトの作成
var builder = NotificationCompat.Builder(this, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setContentTitle("Title")
.setContentText("Text")
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setContentIntent(pendingIntent)
.setAutoCancel(true)

//通知の実施
val notificationManager: NotificationManager =
getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
notificationManager.notify(0, builder.build())
}
}
}

実行結果

アプリ起動時

ボタンを押して通知を実施します。

アプリ起動時
ボタンを押したとき

通知バーに通知が表示されました。

ボタン押した後
通知をタップしたとき

通知が消え、アプリが起動されました。

通知をタップした後

実装に誤りがないのに通知が表示されない場合…

アプリの通知設定がOFFになっているかもしれません。

以下の手順でアプリの通知が許可されているか確認してみましょう。

  1. アプリアイコンを長押し
  2. 「App Info」をタップ
  3. 「Notifications」をタップ
  4. 「All (アプリ名) notifications」をONにする
通知の設定

まとめ

NotificationCompatを用いた、通知の実装方法を説明しました。

Android8.0から仕様が変わっており、必ず通知チャンネルを最初に作成する必要があります。また、通知にはIDの設定も必要となり、IDによって通知を管理しています。

実装方法に誤りがないにも関わらず通知が表示されない場合は、アプリの通知設定を確認してみましょう。

参考

通知を作成する|Android Developers

学習方法

Javaの基礎を学ぶ

Androidアプリ開発では、JavaやKotlinが用いられます。
いきなりAndroidアプリ開発を学習するのは難しいので、Javaの基礎から学習しておくと理解しやすくなります。

既に、Javaの学習経験・開発経験がある方は必要ありませんが、Java言語を使ったことがないという方は、Javaの基礎から学習することをオススメします。

また、Kotlinに関しては、Javaを簡略したような書き方となっています。Javaの基礎知識がないと学習が難しいですが、Javaの基礎知識があれば、ご自身で調べながら学習することも十分に可能です。

 

独学が難しいと思ったら…

プログラミングスクールを活用してみても良いでしょう。
通常のプログラミングスクールは、数十万円の費用が掛かる場合があり、中々手が出しづらいですが、サブスク型のプログラミングスクールも存在しています。
サブスク型と言っても、通常のプログラミングスクールと同じように、現役エンジニアによるサポートも付いています。
最も安い基本的なコースで、月額1万円ほどとなっており、他のプログラミングスクールよりも初期費用が安いため、気軽に始められます。

Androidアプリ開発を学ぶ

Javaの基礎知識があったとしても、Androidアプリ独特の仕組みがあるため、とっつきづらいです。

Javaでの開発経験があれば、問題を解決しながら学習することも可能です。しかし、(当サイト含め)ネットでの情報は断片的に解説されていることも多く、流れで理解するのは難しいかしれません。

ご自身で調べながら学習することが難しいと感じたら、市販の参考書を活用すると良いでしょう。参考書では、Androidアプリ開発というテーマに沿って、1冊内で解説していく流れとなっていますので、入門書として活用すると理解がしやすくなります。

Kotlin版

Java版

 

Androidアプリ開発
この記事を書いた人

エンジニアとして仕事をしています。
仕事や趣味を通して、開発やプログラミングについて学んだことを綴っていきます。
 ・実務経験は、WEBシステムのサーバーサイドコーディングがメイン
 ・アプリ開発は趣味程度

akihiro-takedaをフォローする
akihiro-takedaをフォローする
プログラミング・開発の備忘録
タイトルとURLをコピーしました