最近做直播诫惭,要求向關(guān)注者發(fā)通知舔庶,顯示在通知欄邪意, 記錄下簡單的使用歉闰。 并發(fā)現(xiàn)一個(gè)在魅族手機(jī)上奇葩的坑旦万。莽红。竭业。
直接上代碼:
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右上角展示小紅點(diǎn)
? ? ? ? ? ? channel.setLightColor(Color.RED); //小紅點(diǎn)顏色
? ? ? ? ? ? channel.setShowBadge(true); //是否在久按桌面圖標(biāo)時(shí)顯示此渠道的通知
? ? ? ? }
NotificationCompat.Builder build =new NotificationCompat.Builder(context, "default");
? ? ? ? build.setContentTitle("測試標(biāo)題");//設(shè)置通知欄標(biāo)題
? ? ? ? build.setContentText(contentText); //設(shè)置通知欄顯示內(nèi)容
? ? ? ? //build.setNumber(3); //設(shè)置通知集合的數(shù)量
? ? ? ? build.setTicker(tickerText); //通知首次出現(xiàn)在通知欄嘱兼,帶上升動(dòng)畫效果的
? ? ? ? build.setWhen(System.currentTimeMillis());//通知產(chǎn)生的時(shí)間国葬,會(huì)在通知信息里顯示,一般是系統(tǒng)獲取到的時(shí)間
? ? ? ? build.setPriority(Notification.PRIORITY_DEFAULT); //設(shè)置該通知優(yōu)先級(jí)
? ? ? ? build.setAutoCancel(true);//設(shè)置這個(gè)標(biāo)志當(dāng)用戶單擊面板就可以讓通知將自動(dòng)取消
? ? ? ? build.setOngoing(false);//ture芹壕,設(shè)置他為一個(gè)正在進(jìn)行的通知,通常是用來表示一個(gè)后臺(tái)任務(wù),以某種方式正在等待,如一個(gè)文件下載,同步操作
? ? ? ? build.setDefaults(Notification.DEFAULT_VIBRATE);//向通知添加聲音汇四、閃燈和振動(dòng)效果
? ? ? ? build.setSmallIcon(R.drawable.app_logo);//設(shè)置通知小ICON
? ? ? ? build.setLargeIcon(BitmapFactory.decodeResource(getResources(), R.drawable.app_logo));
? ? ? ? build.setContentIntent(intent); //設(shè)置通知欄點(diǎn)擊意圖
? ? ? ? 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()方法為點(diǎn)擊通知時(shí)執(zhí)行的意圖,這里跳轉(zhuǎn)到一個(gè)activity踢涌。
現(xiàn)在開始彈出通知:
notifcationManage = (NoificationManager) getSystemService(NOTIFICATION_SERVICE);:
int id = (int) System.currentTimeMillis();
PendingIntent clickIntent = getContentIntent(MainActivity.this, id);
notifyLiveStart(MainActivity.this, clickIntent, id, "您關(guān)注的主播開播啦通孽!", "有新的通知");
哈哈,就這么使用~~~?
但坑來了睁壁, 當(dāng)我用魅族pro6試怎么彈不出來~~
機(jī)型適配嘛背苦,Android程序員懂得,網(wǎng)上一股搜索潘明,也沒下文行剂。。钳降。
后來無意發(fā)現(xiàn)問題出在傳的通知內(nèi)容“您關(guān)注的主播開播啦厚宰!”, 去掉感嘆號(hào)就好了。遂填。
魅族的, 不能有嘆號(hào)啊,不能有嘆號(hào)啊,不能有嘆號(hào)啊铲觉。澈蝙。。撵幽。灯荧。
捉雞的,魅族系統(tǒng)bug并齐!根據(jù)系統(tǒng)判斷漏麦,替換掉感嘆號(hào):
if (SystemUtil.isMeizuFlymeOS(context)) {//魅族的, 不能有嘆號(hào)啊,不能有嘆號(hào)啊,不能有嘆號(hào)啊https://bbs.meizu.cn/thread-6833068-1-1.html
? ? contentText = contentText.replace("!", ".");
? ? contentText = contentText.replace("!", "况褪。");
}
SystemUtil自定義的工具類撕贞,用于判斷當(dāng)前手機(jī)系統(tǒng),這在網(wǎng)上直接找就好了测垛!
好了捏膨,這下解決!
不過遇到在華為p10彈不出通知食侮,就不知道為什么了号涯。。有知道的告訴我下
(這問題已解決,? 請看解決在Android 8.0無法顯示通知 - 簡書)