最近做直播,要求向关注者发通知,显示在通知栏, 记录下简单的使用。 并发现一个在魅族手机上奇葩的坑。。。
直接上代码:
private void notifyLiveStart(Activity context, PendingIntent intent, int id, String contentText, String tickerText) {
NotificationChannel channel =null;
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {
channel =new NotificationChannel("1",
"Channel1", NotificationManager.IMPORTANCE_DEFAULT);
channel.enableLights(true); //是否在桌面icon右上角展示小红点
channel.setLightColor(Color.RED); //小红点颜色
channel.setShowBadge(true); //是否在久按桌面图标时显示此渠道的通知
}
NotificationCompat.Builder build =new NotificationCompat.Builder(context, "default");
build.setContentTitle("测试标题");//设置通知栏标题
build.setContentText(contentText); //设置通知栏显示内容
//build.setNumber(3); //设置通知集合的数量
build.setTicker(tickerText); //通知首次出现在通知栏,带上升动画效果的
build.setWhen(System.currentTimeMillis());//通知产生的时间,会在通知信息里显示,一般是系统获取到的时间
build.setPriority(Notification.PRIORITY_DEFAULT); //设置该通知优先级
build.setAutoCancel(true);//设置这个标志当用户单击面板就可以让通知将自动取消
build.setOngoing(false);//ture,设置他为一个正在进行的通知,通常是用来表示一个后台任务,以某种方式正在等待,如一个文件下载,同步操作
build.setDefaults(Notification.DEFAULT_VIBRATE);//向通知添加声音、闪灯和振动效果
build.setSmallIcon(R.drawable.app_logo);//设置通知小ICON
build.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.app_logo));
build.setContentIntent(intent); //设置通知栏点击意图
Notification mNotification = build.build();
notificationManager.notify(id, mNotification);
}
public PendingIntent getContentIntent(Activity context, int id) {
Intent intent =new Intent(this, NoticeActivty.class);
return PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
getContentIntent()方法为点击通知时执行的意图,这里跳转到一个activity。
现在开始弹出通知:
notifcationManage = (NoificationManager) getSystemService(NOTIFICATION_SERVICE);:
int id = (int) System.currentTimeMillis();
PendingIntent clickIntent = getContentIntent(MainActivity.this, id);
notifyLiveStart(MainActivity.this, clickIntent, id, "您关注的主播开播啦!", "有新的通知");
哈哈,就这么使用~~~
但坑来了, 当我用魅族pro6试怎么弹不出来~~
机型适配嘛,Android程序员懂得,网上一股搜索,也没下文。。。
后来无意发现问题出在传的通知内容“您关注的主播开播啦!”, 去掉感叹号就好了。。
魅族的, 不能有叹号啊,不能有叹号啊,不能有叹号啊。。。。。
捉鸡的,魅族系统bug!根据系统判断,替换掉感叹号:
if (SystemUtil.isMeizuFlymeOS(context)) {//魅族的, 不能有叹号啊,不能有叹号啊,不能有叹号啊https://bbs.meizu.cn/thread-6833068-1-1.html
contentText = contentText.replace("!", ".");
contentText = contentText.replace("!", "。");
}
SystemUtil自定义的工具类,用于判断当前手机系统,这在网上直接找就好了!
好了,这下解决!
不过遇到在华为p10弹不出通知,就不知道为什么了。。有知道的告诉我下
(这问题已解决, 请看解决在Android 8.0无法显示通知 - )