文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Android使用Notification,通知无法显示的问题

2022-06-06 13:54

关注

今天看着《第一行代码》,准备实现一下书中所说的notification通知功能。非常简单的代码如下所示

@Override
public void onClick(View v) {
    switch(v.getId()){
        case R.id.send_notice:
            NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
            Notification notification = new NotificationCompat.Builder(this)
                        .setContentTitle("This is content title")
                        .setContentText("This is content text")
                        .setWhen(System.currentTimeMillis())
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
                        .build();
                manager.notify(1,notification);
                break;
            default:
                break;
        }
    }

结果运行起来,无论怎么样点击button,都不会产生通知。一开始怀疑是模拟器的问题,于是我在手机上尝试,结果仍然显示不出来。这时我心想不应该啊,书上写的怎么会错呢?于是我决定看一下NotificationManager源码看看到底是哪里出了问题。

点开notify方法,发现它其实调用的是notifyAsUser方法,不过看了notifyAsUser方法我还是看不出来为什么显示不出来。忽然看到下面的fixNotification方法中提到了Build.VERSION_CODES,于是我就想到有没有可能是安卓版本的问题?点击Build进去,搜索NotificationManager之后,我终于找到了原因。在安卓版本8.0(O)前面的注释中写到:

* 
  • The {@link android.app.NotificationManager} now requires the use of notification channels.
  • 原来在8.0版本之后需要使用notification channels,于是我修改代码

    	Notification notification = null;
    	NotificationManager manager = (NotificationManager)getSystemService(NOTIFICATION_SERVICE);
    	if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
    		String id = "channelId";
    		String name = "channelName";
    	 	NotificationChannel channel = new NotificationChannel(id,name,NotificationManager.IMPORTANCE_LOW);
    	    manager.createNotificationChannel(channel);
    	    notification = new Notification.Builder(this)
    	    	.setChannelId(id)
    	        .setContentTitle("This is content title O")
    	        .setContentText("This is content text O")
    	        .setWhen(System.currentTimeMillis())
    	        .setSmallIcon(R.mipmap.ic_launcher)
    	        .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
    	        .build();
    	}else{
    		notification = new NotificationCompat.Builder(this)
    	    	.setContentTitle("This is content title")
    	        .setContentText("This is content text")
    	        .setWhen(System.currentTimeMillis())
    	        .setSmallIcon(R.mipmap.ic_launcher)
    	        .setLargeIcon(BitmapFactory.decodeResource(getResources(),R.mipmap.ic_launcher))
    	        .build();
    	}
    	manager.notify(1,notification);
    

    运行完,就可以成功显示了,记录一下这个小坑, 希望可以帮助到大家


    作者:inorilin


    阅读原文内容投诉

    免责声明:

    ① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

    ② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

    软考中级精品资料免费领

    • 历年真题答案解析
    • 备考技巧名师总结
    • 高频考点精准押题
    • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

      难度     807人已做
      查看
    • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

      难度     351人已做
      查看
    • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

      难度     314人已做
      查看
    • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

      难度     433人已做
      查看
    • 2024年上半年系统架构设计师考试综合知识真题

      难度     221人已做
      查看

    相关文章

    发现更多好内容

    猜你喜欢

    AI推送时光机
    位置:首页-资讯-移动开发
    咦!没有更多了?去看看其它编程学习网 内容吧
    首页课程
    资料下载
    问答资讯