我是靠谱客的博主 强健马里奥,最近开发中收集的这篇文章主要介绍对于SkAndroidCodec::NewFromStream returned null,我的解决方案,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

我遇到这个问题,而不能成功创建通知,原因是我的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() 为必需项。

最后调用NotificationManagernotify() 方法:

manager.notify(1, notification);

重点

上述NotificationCompat.Builder() 方法中接收了两个参数,第一个是this,第二个是NotificationChannelChannelIdAPI 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,我的解决方案所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部