Android 8.0以降からは新しく通知チャンネルが機能が追加されたため、
その対応をする必要がありました。
ただし、Android8.0未満は通知チャンネル機能がないため、
Android8.0未満の処理も必要である。
Android 8についての公式ドキュメント
https://developer.android.com/training/notify-user/channels.html
追加したコード内容
NotificationReceiver.java
// create notification builder
NotificationCompat.Builder builder;
// Android 8 (Oreo) への対応
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
// Create channel to show notifications.
//通知チャンネル名
CharSequence name = title;
//チャンネルのメッセージ
String description = message;
//チャンネルの重要度の設定
int importance = NotificationManager.IMPORTANCE_DEFAULT;
//第一引数は通知チャンネルのID 任意で問題ない。
NotificationChannel channel = new NotificationChannel("default", name, importance);
//チャンネルの説明を入れる
channel.setDescription(description);
NotificationManager notificationManager = context.getSystemService(NotificationManager.class);
notificationManager.createNotificationChannel(channel);
//コンストラクタ 第2引数はNotificationChannelのコンストラクタの第1引数を渡す
builder = new NotificationCompat.Builder(context,"default");
}else{
//以下はAndroid 8未満の対応
//コンストラクタの第2引数にチャンネルを渡すとエラーが発生します。
builder = new NotificationCompat.Builder(context);
}
//通知に必要なNotificationManagerCompatを生成する
NotificationManagerCompat notificationManagerCompat = NotificationManagerCompat.from(context);
//通知を発行する。
//requestCodeはレスポンスコードを指定しています。
notificationManagerCompat.notify(requestCode, builder.build());
build.gradle
android {
========================追加開始========================
compileSdkVersion 28
buildToolsVersion "28.0.0"
========================追加終了========================
defaultConfig {
~以下略~
========================追加開始========================
targetSdkVersion 28
========================追加終了========================
~以下略~
}
~以下略~
}
dependencies {
~以下略~
========================追加開始========================
implementation "com.android.support:support-compat:28.0.0" //gradleにv4 compatライブラリを追加する
========================追加終了========================
~以下略~
}
※補足
targetSdkVersionを25にするとAndroid 8.0でもローカル通知が来ますが、Google PlayにAPKをアプロードする時にエラーになる可能性があるので、推奨はできない。
コメントを残す