如何为API级别16以上的所有设备发送本地通知?

时间:2019-04-23 12:20:33

标签: android android-notifications

我能够将通知从Firebase发送到设备。但是我需要将通知发送到本地同一设备。我正在使用oreo版本移动设备。 我尝试使用此代码:

 NotificationCompat.Builder b = new NotificationCompat.Builder(this,"150");

    b.setAutoCancel(true)
            .setDefaults(Notification.DEFAULT_ALL)
            .setWhen(System.currentTimeMillis())
            .setSmallIcon(R.mipmap.ic_launcher)
            .setTicker("Hearty365")
            .setContentTitle("Default notification")
            .setDefaults(Notification.DEFAULT_LIGHTS| Notification.DEFAULT_SOUND)
            .setContentInfo("Info");


    NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(1, b.build());

2 个答案:

答案 0 :(得分:2)

  

Android-O包括通知频道

    NotificationManager notificationManager = 
        (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
int notifyId = 1;
String channelId = "some_channel_id";

Notification notification = new Notification.Builder(MainActivity.this)
        .setContentTitle("Some Message")
        .setContentText("You've received new messages!")
        .setSmallIcon(R.drawable.ic_notification)
        .setChannel(channelId)
        .build();

notificationManager.notify(id, notification);
  

通知渠道

通知通道使我们能够将应用程序发送的通知分组为可管理的组。通知进入这些频道后,我们就不再需要对其功能进行输入了-因此,由用户来管理这些频道。在更改我们的应用程序通知的设置时,将为用户提供以下选项:

从左侧开始,您可以在第一个屏幕中看到我们应用程序的通知设置显示了我们应用程序的通知设置。用户可以在这里:

阻止我们应用程序的所有通知渠道。这意味着来自我们应用程序的通知将永远不会显示在用户设备上 如果支持,则用户可以声明是否应将我们的应用程序通知显示为“主页”应用程序上的标志 对于我们的应用程序存在的通知类别。用户可以从此处切换启用或禁用这些功能 一旦用户从第一个屏幕中选择了通知类别,就可以访问下一个屏幕(中间)。用户可以从这里进行以下操作:

阻止来自我们应用的所有来自此渠道的通知 如果支持,则在Home应用中显示来自此频道的通知 并且如最终屏幕截图所示,用户还可以设置来自此频道的通知的重要性。此处选择的选项将说明收到通知时如何提示他们。

我们还可以将通知渠道分为不同的组。这样一来,我们便能够在多个应用程序模式中拥有相同的通知渠道。

例如,我的应用程序可能支持“个人和企业”模式或“儿童和父母”模式-这使我们可以选择管理多个组中的通知设置。

这些内容显示在与我们的通知渠道相同的位置,只是分为相应的组。

在较旧版本的Android(pre-O)上,这些新功能将被完全忽略,因此我们不必担心当前的实现会中断。

现在我们对什么是通知渠道有了更多的了解,我认为现在该是我们研究如何将其实现到应用程序中的时候了!

Exploring Android O: Notification Channels

答案 1 :(得分:0)

以下是您创建通知频道的方法:

CharSequence name = getString(R.string.notification_channel_name);
            String description = getString(R.string.notification_channel_description);
            int importance  = NotificationManager.IMPORTANCE_DEFAULT;

            NotificationChannel channel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, name, importance);
            channel.setDescription(description);

            NotificationManager notificationManager1 = getSystemService(NotificationManager.class);
            notificationManager1.createNotificationChannel(channel);

然后使用通知频道发送通知(请记住保存您的NOTIFICATION_CHANNEL_ID):

NotificationCompat.Builder builder = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID)
                .setSmallIcon(R.drawable.ic_canceledrantevu)
                .setContentIntent(pendingIntent)
                .setContentTitle(context.getString(R.string.notification_add_busy_title))
                .setContentText(context.getString(R.string.notification_add_busy_msga))
                .setVibrate(new long[] {1000, 1000})
                .setPriority(NotificationCompat.PRIORITY_DEFAULT)
                .setAutoCancel(true);

        notificationManager.notify(100, builder.build());

请记住,如果要在API级别> = Version.Oreo

的设备中显示通知,则必须创建一个通知通道。