概述
我遇到这个问题,而不能成功创建通知,原因是我的API 大于26,需要创建NotificationChannel
Notification notification = new NotificationCompat.Builder(this, "chat")
.setContentTitle("标题")
.setContentText("内容")
.setWhen(System.currentTimeMillis())
.setSmallIcon(R.drawable.ic_launcher_foreground)
.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher_foreground))
.setAutoCancel(true)
.build();
其中setContentTitle()
、setContentText()
和setSmallIcon()
为必需项。
最后调用NotificationManager 的notify()
方法:
manager.notify(1, notification);
重点:
上述NotificationCompat.Builder()
方法中接收了两个参数,第一个是this,第二个是NotificationChannel 的ChannelId (API 26 以上必须传入这一参数,否则通知不能创建)
创建NotificationChannel:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
String channelId = "chat";
String channelName = "notification";
int importance = NotificationManager.IMPORTANCE_MIN;
createNotificationChannel(channelId, channelName, importance);
}
@RequiresApi(api = Build.VERSION_CODES.O)
private void createNotificationChannel(String channelId, String channelName, int importance){
NotificationChannel channel = new NotificationChannel(channelId, channelName, importance);
NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
assert notificationManager != null;
notificationManager.createNotificationChannel(channel);
}
(其中channelId 必须每个通知都不一样;channelName 可以相同,只是用来描述通知而已)
看到这里,可能有的朋友会有点疑惑,createNotificationChannel()
方法中的channel 实例化之后根本就没有使用啊,写出来干嘛?
其实这个NotificationManager 对象是写给系统看的。当我们新建一个NotificationChannel 对象之后,系统并不会注册这个通知。只有当我们执行NotificationManager 对象的createNotificationChannel()
方法之后,这个通知才会被系统注册。我们接下来才能够成功调用NotificationCompat.Builder(this, "chat")
方法来使用这个系统已经注册好的通知
还有一些需要注意的点:当一个通知已经注册过了,我们不能通过改变其importance 参数然后重新注册该通知来实际地改变其在系统中的重要程度。因为一个通知在第一次注册后就已经在系统中固定了其重要程度,若需要改变重要程度,只能重装软件重新注册,或者新建一个通知,将NotificationCompat.Builder()
方法链接上新的ChannelId。
对于一个软件的通知类别,可以在手机的:设置 -> 应用和通知 -> 通知管理 -> 应用通知 中找到目标软件即可
最后
以上就是强健马里奥为你收集整理的对于SkAndroidCodec::NewFromStream returned null,我的解决方案的全部内容,希望文章能够帮你解决对于SkAndroidCodec::NewFromStream returned null,我的解决方案所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复