【发布时间】:2021-02-21 16:39:58
【问题描述】:
我正在构建一个提醒应用程序。为此,我需要在触发警报管理器时显示通知。我已经实现了一点。警报正在工作,但没有显示任何通知。
package com.aakash.assignmentone;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Build;
import android.widget.Toast;
import androidx.core.app.NotificationCompat;
public class broadcastForReminder extends BroadcastReceiver {
static MediaPlayer mp;
static final String chID = "Reminder";
@Override
public void onReceive(Context context, Intent intent) {
String msg = intent.getStringExtra("rMsg");
if(intent.getStringExtra("rMsg") != null && intent.getStringExtra("rMsg").equals(msg)){
NotificationManager notMan = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
String name = "REMINDER NOTIFICATION";
String description = "Notification channel for notifying while reminder beeps.";
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel channel = new NotificationChannel(chID, name, importance);
channel.setDescription(description);
notMan.createNotificationChannel(channel);
}
NotificationManager manager =
(NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_baseline_alarm_24)
.setContentTitle("It's time!")
.setContentText(msg)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setAutoCancel(true);
Intent i = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, i, PendingIntent.FLAG_ONE_SHOT);
builder.setContentIntent(pendingIntent);
manager.notify(1, builder.build());
}
mp = MediaPlayer.create(context, R.raw.alarm_beep);
mp.start();
}
}
更新
我唯一错过的是在初始化通知构建器时传递通道 ID。
而不是
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
.setSmallIcon(R.drawable.ic_baseline_alarm_24)
.setContentTitle("It's time!")
.setContentText(msg)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setAutoCancel(true);
有效的解决方案是
NotificationCompat.Builder builder = new NotificationCompat.Builder(context, chID)
.setSmallIcon(R.drawable.ic_baseline_alarm_24)
.setContentTitle("It's time!")
.setContentText(msg)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setAutoCancel(true);
【问题讨论】:
标签: android android-studio broadcastreceiver android-notifications notificationmanager