Android Notification在真机上失效

在尝试使用Notification向用户发送服务器更新信息时,发现通知只在模拟器上正常工作,而在真机上无法显示。经过排查,问题在于缺少消息渠道的设置。通过创建并设置消息渠道,成功解决了真机上Notification失效的问题。

为了实现服务器信息发生变化时,App向用户发出通知这个功能,在网上学了下Notification类,但通知在模拟器上好好的,一到真机上测试,就怎么也不出来了。换了好多种不同的写法,都是失败,百度上也搜索不到相关的问题。上上下下搞了3,4个小时,最后还是自己捣鼓出来了,记录下。

关键问题出在消息渠道上,要为Builder设置消息渠道,上代码。

//创建消息渠道
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            String channelId = "State";
            String channelName = "状态";
            int importance = NotificationManager.IMPORTANCE_HIGH;
            createNotificationChannel(channelId, channelName, importance);
}

createNotificationChannel函数实现:

@TargetApi(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);
        notificationManager.createNotificationChannel(channel);
}

消息渠道已经创建好了,下面为Builder设置消息渠道

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(MainActivity.this,"default");

/**
*  设置Builder
*/
mBuilder.setContentTitle("我是标题")
		.setChannelId("State")  //关键!一定要set,不然就失效
		.setContentText("我是内容")
		.setLargeIcon(BitmapFactory
		.decodeResource(getResources(), R.mipmap.ic_launcher))
		.setSmallIcon(R.mipmap.ic_launcher_round)
		.setWhen(System.currentTimeMillis())
		.setTicker("我是测试内容")
		.setDefaults(Notification.DEFAULT_SOUND);
notificationManager.notify(10, mBuilder.build());
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值