Android8.0中通知无法正常使用问题

Android8.0中通知无法正常使用问题

问题描述

Android O做很多修改,如悬浮窗、通知、广播、WiFi、蓝牙等。

近期我在往Android8.0 porting项目过程中就遇到了无法正常发送通知的问题

 

问题分析

当APP往通知栏发送通知时显示不出来,Toast显示...Failed topost notification on channel "null"...

查看官方文档 https://developer.android.com/preview/features/notification-channels.html

文档里是这样写的:

If you targetAndroid O and post a notification without specifying a valid notificationschannel, the notification fails to post and the system logs an error.

大意就是说,如果在Android O发送通知需要设置notificationchannel,否则通知会发送失败。

 

解决思路:

文档中已经说明了,Android O 中发送通知需要设置notification channel。用法如下:

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

// The id of the channel.

String id ="my_channel_01";

// The user-visible nameof the channel.

CharSequence name = getString(R.string.channel_name);

// The user-visibledescription of the channel.

String description = getString(R.string.channel_description);

int importance =NotificationManager.IMPORTANCE_LOW;

NotificationChannel mChannel =newNotificationChannel(id, name,importance);

// Configure thenotification channel.

mChannel.setDescription(description);

mChannel.enableLights(true);

// Sets the notificationlight color for notifications posted to this

// channel, if the devicesupports this feature.

mChannel.setLightColor(Color.RED);

mChannel.enableVibration(true);

mChannel.setVibrationPattern(newlong[]{100,200,300,400,500,400,300,200,400});

mNotificationManager.createNotificationChannel(mChannel);

 

然后应用到Notification中:

mNotificationManager =(NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
// Sets an ID for the notification, so it can be updated.
int notifyID =1;
// The id of the channel.
String CHANNEL_ID ="my_channel_01";
// Create a notification and set the notification channel.
Notification notification =newNotification.Builder(MainActivity.this)
    .setContentTitle("New Message")
    .setContentText("You've received new messages.")
    .setSmallIcon(R.drawable.ic_notify_status)
    .setChannelId(CHANNEL_ID)
    .build();
// Issue the notification.
mNotificationManager.notify(id, notification);

 

NotificationCompat 使用方法:

NotificationCompat.Builder mBuilder;
mBuilder =newNotificationCompat.Builder(getApplicationContext())
    .setSmallIcon(R.mipmap.ic_launcher_icon)
    .setContentTitle("Title")
    .setContentText("Text")
    .setOngoing(true)
    .setChannelId(id);

你可能感兴趣的:(Android)