Android 7.1及更低版本的双通知显示

时间:2020-02-23 08:23:34

标签: java android notifications

我在我的应用程序中添加了计划通知,除了运行低于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及更低版本上显示双重通知的原因。

还要确保:在启动时创建通知是否错误?书上还有更多的方法吗?

先谢谢了。

1 个答案:

答案 0 :(得分:1)

 NotificationManagerCompat notificationManager = NotificationManagerCompat.from(app);
    notificationManager.notify(NOTIFICATION_ID, notificationBuilder.build());

将此代码添加到您的通知发布者类。