iis服务器助手广告广告
返回顶部
首页 > 资讯 > 移动开发 >Android使用Notification,通知无法显示的问题
  • 177
分享到

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

notificationAndroid 2022-06-06 13:06:45 177人浏览 安东尼
摘要

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

今天看着《第一行代码》,准备实现一下书中所说的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


    --结束END--

    本文标题: Android使用Notification,通知无法显示的问题

    本文链接: https://www.lsjlt.com/news/29519.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    本篇文章演示代码以及资料文档资料下载

    下载Word文档到电脑,方便收藏和打印~

    下载Word文档
    猜你喜欢
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作