普通通知生成器不会在Android O上显示通知。
如何在Android 8 Oreo上显示通知?
在Android O上显示通知是否需要添加新的代码?
除了这个答案之外,您还需要先创建通知通道,然后才能使用它。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
/* Create or update. */
NotificationChannel channel = new NotificationChannel("my_channel_01",
"Channel human readable title",
NotificationManager.IMPORTANCE_DEFAULT);
mNotificationManager.createNotificationChannel(channel);
}
此外,仅当targetSdkVersion为26或更高版本时,才需要使用通道。
如果您使用的是NotificationCompat。生成器,您还需要更新到支持库的beta版本:https://developer.android.com/topic/libraries/support-library/revisions.html#26-0-0-beta2(能够在compat builder上调用setChannelId)。
小心,因为此库更新会将minSdkLevel提高到14。
在这里,我发布了一些带有意图处理的快速解决方案功能
public void showNotification(Context context, String title, String body, Intent intent) {
NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
int notificationId = 1;
String channelId = "channel-01";
String channelName = "Channel Name";
int importance = NotificationManager.IMPORTANCE_HIGH;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
NotificationChannel mChannel = new NotificationChannel(
channelId, channelName, importance);
notificationManager.createNotificationChannel(mChannel);
}
NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, channelId)
.setSmallIcon(R.mipmap.ic_launcher)
.setContentTitle(title)
.setContentText(body);
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context);
stackBuilder.addNextIntent(intent);
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(
0,
PendingIntent.FLAG_UPDATE_CURRENT
);
mBuilder.setContentIntent(resultPendingIntent);
notificationManager.notify(notificationId, mBuilder.build());
}
在Android O中,必须将通道与通知生成器一起使用
以下是示例代码:
// Sets an ID for the notification, so it can be updated.
int notifyID = 1;
String CHANNEL_ID = "my_channel_01";// The id of the channel.
CharSequence name = getString(R.string.channel_name);// The user-visible name of the channel.
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID, name, importance);
// Create a notification and set the notification channel.
Notification notification = new Notification.Builder(MainActivity.this)
.setContentTitle("New Message")
.setContentText("You've received new messages.")
.setSmallIcon(R.drawable.ic_notify_status)
.setChannelId(CHANNEL_ID)
.build();
或通过以下方式处理兼容性:
NotificationCompat notification =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("My notification")
.setContentText("Hello World!")
.setChannelId(CHANNEL_ID).build();
现在让它通知
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.createNotificationChannel(mChannel);
// Issue the notification.
mNotificationManager.notify(notifyID , notification);
或者,如果您想要一个简单的修复,请使用以下代码:
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mNotificationManager.createNotificationChannel(mChannel);
}
更新:NotificationCompat。生成器参考
NotificationCompat.Builder(Context context)
API级别26.0.0中不推荐使用此构造函数,因此您应该使用
Builder(Context context, String channelId)
因此,无需使用新构造函数设置ChannelID。
您应该使用当前最新的AppCompat库26.0.2
compile "com.android.support:appcompat-v7:26.0.+"
来源YouTubeAndroid开发者频道
此外,您还可以查看Android官方文档
我正在使用Visual Studio+Xamarin开发一个Android应用程序,并尝试在Oreo(API26)上接收后台Firebase云消息通知。 问题 当我的应用程序是后台时,通知不会显示在通知抽屉中(仅在Android API 26 Oreo上)。然而,当应用程序被前景化时,通知是有效的。 注释 FCM通知适用于所有其他构建版本<26,包括后台和前台FCM消息(这些消息出现在通知抽屉中,
说明: 有谁遇到过这样的问题?我需要任何提示来解决它,因为它看起来很奇怪,因为我有所有4个键入的.png图标在mipmap文件夹。
编辑 我的通知是这样创建的,到目前为止,它在数千个API<26的android设备上工作:
我正在创建一个应用程序,显示未来日期的通知。为了在将来显示通知,我使用了AlarmManager。 在我的一个活动中单击按钮,我会创建如下通知 以下是我的BootService类代码: 在测试应用程序时,我看到通知显示,问题是特定于启动手机。在上面的代码中,我通过调用LoadAlarmsFromDatabase来重新创建通知 为了处理启动时重新创建警报,我使用了BroadcastRecaver 公
当用户未连接到xmpp时,我正在使用FCM通知进行聊天。 FCM中有两种通知模式1。通知消息2。数据消息 如果我的应用程序最近被清除,我将不会使用数据消息作为通知消息 这种方法适用于除奥利奥以外的所有版本。 对于Oreo,我只有在应用程序未连接到xmpp且处于前台时才会收到通知。我的onMessageReception方法正在被调用。 但当该应用程序仅为奥利奥而被删除或从最近的应用程序中删除时,情
问题内容: 我查看了android文档,并查看了StackOverflow中的所有答案,但是,我似乎无法理解为什么我尝试显示的通知没有显示。每当我单击按钮时,应用程序就会崩溃,而不是显示通知,而有人可以告诉我为什么会发生这种情况吗? 这是堆栈跟踪 问题答案: 根据错误消息,您不能将其用作通知通道的ID-该名称专门为未定位API 26或更高版本的应用程序保留,用于发布未连接任何通道的所有通知。 您可