[英]Android notifications not showing
我正在尝试制作将在特定时间显示的每日通知。 不幸的是它没有显示。
我试图关注夫妇 tuto(也来自developer.android.com )并检查了已经被问到的类似问题。 为了节省时间,我正在使用 Hawk 库。
Intent intent = new Intent(getContext(), AlarmReceiver.class);
int notificationId = 1;
intent.putExtra("notificationId", notificationId);
PendingIntent alarmIntent = PendingIntent.getBroadcast(getContext(), 0,
intent,PendingIntent.FLAG_NO_CREATE);
AlarmManager alarm = (AlarmManager) getContext().getSystemService(getContext().ALARM_SERVICE);
switch (view.getId()) {
int hour = timePicker.getCurrentHour();
int minute = timePicker.getCurrentMinute();
// Create time
....
//set alarm
alarm.setRepeating(AlarmManager.RTC_WAKEUP, alarmStartTime, AlarmManager.INTERVAL_DAY, alarmIntent);
Hawk.put("notification_hour", alarmStartTime);
break;
case R.id.cancel_button:
//cancel notification
break;
}
}
这里是 AlarmReceiver 类
public class AlarmReceiver extends BroadcastReceiver {
public AlarmReceiver () {
}
@Override
public void onReceive(Context context, Intent intent) {
sendNotification(context, intent);
}
private void sendNotification(Context con, Intent intent) {
int notificationId = intent . getIntExtra ("notificationId", 1);
String message = " message";
Intent mainIntent = new Intent(con, MainActivity.class);
PendingIntent contentIntent = PendingIntent . getActivity (con, 0, mainIntent, 0);
NotificationManager myNotificationManager =(NotificationManager) con . getSystemService (Context.NOTIFICATION_SERVICE);
Notification.Builder builder = new Notification.Builder(con);
builder.setSmallIcon(android.R.drawable.ic_dialog_info)
.setContentTitle("Reminder")
.setContentText(message)
.setWhen(System.currentTimeMillis())
.setAutoCancel(true)
.setContentIntent(contentIntent)
.setPriority(Notification.PRIORITY_MAX)
.setDefaults(Notification.DEFAULT_ALL);
myNotificationManager.notify(notificationId, builder.build());
}
}
在 OREO 中,他们重新设计了通知,以提供一种更简单、更一致的方式来管理通知行为和设置。 其中一些变化包括:
通知渠道:Android 8.0 引入了通知渠道,允许您为要显示的每种通知类型创建用户可自定义的渠道。 通知点:Android 8.0 支持在应用启动器图标上显示点或徽章。 通知点反映了用户尚未解除或采取行动的通知的存在。
打盹:用户可以暂停通知,这使他们消失重现之前的一段时间。 通知重新出现时的重要性与它们首次出现时相同。
消息样式:在 Android 8.0 中,使用 MessagingStyle 类的通知以折叠形式显示更多内容。 对于与消息相关的通知,您应该使用 MessagingStyle 类。 在这里,我们创建了需要 Context 作为构造函数参数的 NotificationHelper 类。 NOTIFICATION_CHANNEL_ID 变量已初始化,以便将 channel_id 设置为 NotificationChannel。
方法createNotification(...)需要标题和消息参数,以便设置通知的标题和内容文本。 为了处理通知点击事件,我们创建了 pendingIntent 对象,该对象重定向到 SomeOtherActivity.class。
通知渠道允许您为要显示的每种通知类型创建用户可自定义的渠道。 所以,如果android版本大于或等于8.0,我们必须创建NotificationChannel对象并将其设置为NotificationManager的createNotificationChannel(…) setter属性。
public class NotificationHelper {
private Context mContext;
private NotificationManager mNotificationManager;
private NotificationCompat.Builder mBuilder;
public static final String NOTIFICATION_CHANNEL_ID = "10001";
public NotificationHelper(Context context) {
mContext = context;
}
/**
* Create and push the notification
*/
public void createNotification(String title, String message)
{
/**Creates an explicit intent for an Activity in your app**/
Intent resultIntent = new Intent(mContext , SomeOtherActivity.class);
resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent resultPendingIntent = PendingIntent.getActivity(mContext,
0 /* Request code */, resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
mBuilder = new NotificationCompat.Builder(mContext);
mBuilder.setSmallIcon(R.mipmap.ic_launcher);
mBuilder.setContentTitle(title)
.setContentText(message)
.setAutoCancel(false)
.setSound(Settings.System.DEFAULT_NOTIFICATION_URI)
.setContentIntent(resultPendingIntent);
mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O)
{
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "NOTIFICATION_CHANNEL_NAME", importance);
notificationChannel.enableLights(true);
notificationChannel.setLightColor(Color.RED);
notificationChannel.enableVibration(true);
notificationChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
assert mNotificationManager != null;
mBuilder.setChannelId(NOTIFICATION_CHANNEL_ID);
mNotificationManager.createNotificationChannel(notificationChannel);
}
assert mNotificationManager != null;
mNotificationManager.notify(0 /* Request Code */, mBuilder.build());
}
只需包含一个 NotificationChannel 并为其设置一个频道 ID。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.