[英]Android 7.1 and lower double notifications showing
我在我的应用程序中添加了预定的通知,除了低于 7.1 的 android 版本显示双重通知外,一切正常。
这是我的通知发布者类(BroadcastReciever)
public class NotificationPublisher extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
this.context = context;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
createChannels();
}
sendNotification("title", "body", notificationId, activity);
}
@RequiresApi(api = Build.VERSION_CODES.O)
private void createChannels() {
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME, NotificationManager.IMPORTANCE_DEFAULT);
channel.enableLights(true);
channel.enableVibration(true);
channel.setDescription(CHANNEL_DESCRIPTION);
channel.setLightColor(Color.RED);
channel.setLockscreenVisibility(Notification.VISIBILITY_PUBLIC);
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
manager.createNotificationChannel(channel);
}
public void sendNotification(String title, String body, int id, Class activity) {
Intent intents = new Intent(context, activity);
PendingIntent pendingIntent = PendingIntent.getActivity(context, id, intents, PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new NotificationCompat.Builder(context, CHANNEL_ID)
.setContentTitle(title)
.setContentText(body)
.setSmallIcon(R.mipmap.ic_launcher)
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
.setStyle(new NotificationCompat.BigTextStyle().setBigContentTitle(title).bigText(body))
.setContentIntent(pendingIntent)
.setAutoCancel(true)
.build();
NotificationManagerCompat.from(context).notify(new Random().nextInt(), notification);
}
}
这是我安排通知的代码:
public static void createNotification(Context context) {
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent("app.action.DISPLAY_NOTIFICATION");
intent.putExtra("notificationId", notificationID);
Calendar calReminder = Calendar.getInstance();
calReminder.setTimeInMillis(System.currentTimeMillis());
calReminder.set(Calendar.HOUR_OF_DAY, 16);
calReminder.set(Calendar.MINUTE, 30);
PendingIntent broadcast = PendingIntent.getBroadcast(context, notificationID, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calReminder.getTimeInMillis(), AlarmManager.INTERVAL_DAY, broadcast);
}
这是我在应用程序启动时的 MainActivity 代码:
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
private NotificationPublisher broadcastReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
broadcastReceiver = new NotificationPublisher();
setNotificationScheduler(this);
}
public static void setNotificationScheduler(Context context) {
AppNotifications.createNotification(context);
}
@Override
protected void onStart() {
super.onStart();
IntentFilter intentFilter = new IntentFilter("app.action.DISPLAY_NOTIFICATION");
intentFilter.addCategory(Intent.CATEGORY_DEFAULT);
registerReceiver(broadcastReceiver, intentFilter);
}
}
我找不到为什么它在 android 7.1 及更低版本上显示双重通知。
也只是为了确保:在启动时创建通知是错误的吗? 有没有更多的书本方法来做到这一点?
提前致谢。
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(app);
notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());
将此代码添加到您的通知发布者类。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.