关于app中Notificaton不显示的问题的一个解决办法

写在前面

        博主最近开始学习Android,会持续的将自己在学习过程当中所遇到的问题以及最后的解决办法分享出来,一方面当作对自己学习过程的一个见证,另一方面也希望能对某个时刻的你有所帮助。

问题描述

        在自己测试一个简单的通知(Notification)的基本用法的时候,按照常规流程去构造出来一个通知

    private void sendNotification(){
        Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.baidu.com"));
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, 0);
        NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
        builder.setContentIntent(pendingIntent);
        builder.setAutoCancel(true);
        builder.setSmallIcon(R.drawable.ic_notice_small);
        builder.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.ic_notice_small));
        builder.setWhen(System.currentTimeMillis());
        builder.setContentTitle("content title");
        builder.setContentText("content text");
        builder.setSubText("sub text");
        NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        manager.notify(NOTIFICATION_ID, builder.build());
    }

 像这个样子,然后就是一个button点击自己制造一个通知

然后自己惊讶的发现,欸???通知呢??

是的,啥也没有

问题来源

网上的教程里其实也都是这么一个过程,既然代码是一毛一样的,那问题就是在环境上了。

博主的测试机是Android o,也就是Android 8.0+。在Android8.0及以上的系统中,若是想要显示一个通知的话,是需要一个叫channel的东西的。channel就像是路一样,通知想要成功发出,就必须有一条路给它走。其实如果要是细心的话会发现在

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);

的时候这个构造方法是不被建议使用的。另一个长得差不多的构造方法多了一个String参数chinnelId,这就是问题所在。

一个基本的解决方案

那当然是给你的这个通知去创建一个channel了,像这个样子

    private static final String  CHINNEL_ID = "channel id 1";
    private static final String CHINNEL_NAME = "channel name 1";


    
    private void createNotificationChannel(){
        //这里判断一下,要是8.0以下就没必要用channel了
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            //这个是必须的
            NotificationChannel infoChannel = new NotificationChannel(CHINNEL_ID, CHINNEL_NAME, NotificationManager.IMPORTANCE_HIGH);
            //下面这些是一些附加的设置
            infoChannel.setDescription("testChannel");
            infoChannel.enableLights(false);
            infoChannel.enableVibration(false);
            NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            manager.createNotificationChannel(infoChannel);
        }
    }

好了,现在就有通知了~~~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值