最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android消息通知Notification常用方法(發(fā)送消息和接收消息)

 更新時(shí)間:2024年02月06日 14:50:26   作者:Parcelable  
最近在做消息通知類Notification的相關(guān)業(yè)務(wù),利用閑暇時(shí)間總結(jié)一下,主要分為兩部分來記錄:發(fā)送消息和接收消息,對(duì)Android消息通知相關(guān)知識(shí)感興趣的朋友一起看看吧

Notification

#前言

最近在做消息通知類Notification的相關(guān)業(yè)務(wù),利用閑暇時(shí)間總結(jié)一下。主要分為兩部分來記錄:發(fā)送消息和接收消息。

發(fā)送消息

發(fā)送消息利用NotificationManager類的notify方法來實(shí)現(xiàn),現(xiàn)用最普通的方式發(fā)送:

Notification.Builder builder = new Notification.Builder(context, channelId);
builder.setSmallIcon(R.drawable.ic_launcher)
                        .setContentTitle("標(biāo)題")
                        .setContentText("內(nèi)容")
Notification notification = builder.build();
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
NotificationChannel notificationChannel = new NotificationChannel(channelId, name,NotificationManager.IMPORTANCE_DEFAULT);
manager.createNotificationChannel(notificationChannel);
manager.notify(R.string.app_name,notification);                      

這樣一段簡(jiǎn)單的發(fā)送消息的代碼就完成了。
在發(fā)送消息的時(shí)候builder可以攜帶很多參數(shù),具體查看api即可,這里我記錄一下我用到的一些常用的方法。

builder..addAction(icon,title,pendingIntent);

三個(gè)參數(shù)分別是int類型(api已過時(shí)),charText類型和pendingIntent意圖。
這個(gè)方法我認(rèn)為就很不錯(cuò),比如當(dāng)需要封裝一個(gè)公共的彈窗,但是按鈕數(shù)量和按鈕顏色以及彈窗的標(biāo)題不一樣,這時(shí)候就可以利用這個(gè)方法進(jìn)行規(guī)定。因?yàn)閍ction是個(gè)數(shù)組,需要幾個(gè)傳幾個(gè)就可以,比如彈窗有兩個(gè)按鈕,那么就傳兩個(gè)action過去,第一個(gè)參數(shù)傳按鈕的顏色值,第二個(gè)參數(shù)傳按鈕的名稱,第三個(gè)參數(shù)傳pendingIntent意圖。這樣就不用很復(fù)雜的實(shí)現(xiàn)邏輯就可以完成這個(gè)公共的彈窗。
同樣,builder支持傳bundle,方法如下:

Bundle bundle = new Bundle();
builder.setExtras(bundle);

bundle可以攜帶參數(shù),同理剛才說的封裝公共彈窗也可以用bundle傳值的形式實(shí)現(xiàn),但是相比較action的方式是不是就會(huì)復(fù)雜很多。
bundle可以傳遞一些公共的參數(shù),比如一個(gè)type,當(dāng)接收到通知的時(shí)候利用type來區(qū)分要做什么動(dòng)作,這個(gè)就看項(xiàng)目實(shí)際需求了。
這里我把通知跳轉(zhuǎn)意圖的跳轉(zhuǎn)activity和接收廣播的代碼放上來,也為自己做個(gè)記錄。

Bundle bundle = new Bundle();
NotificationChannel notificationChannel = new NotificationChannel("99", "TEMP", NotificationManager.IMPORTANCE_DEFAULT);                 
Notification.Builder builder = new Notification.Builder(MainActivity.this, "99");
//Intent intent = new Intent(MainActivity.this,SecondActivity.class);
Intent intent = new Intent(MainActivity.this,MyBroadCastReceiver.class);
intent.setAction("android.intent.action.MY_BROADCAST");
intent.addCategory(Intent.CATEGORY_LAUNCHER);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//PendingIntent pendingIntent = PendingIntent.getActivity(MainActivity.this,0,intent,PendingIntent.FLAG_CANCEL_CURRENT);
PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this,0,intent,PendingIntent.FLAG_CANCEL_CURRENT);
builder.setSmallIcon(R.drawable.ic_launcher_background)
                        .setContentTitle("標(biāo)題")
                        .setContentText("內(nèi)容")
                        .setWhen(System.currentTimeMillis())
                        .addAction(R.color.purple_200,"確定",pendingIntent)
                        .addAction(R.color.black,"取消",pendingIntent)
                        .setExtras(bundle);
Notification notification = builder.build();
NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.createNotificationChannel(notificationChannel);
manager.notify(R.string.app_name,notification);

刪除通知:

manager.cancel(tag,id);

這里注意的是發(fā)送通知可以是兩個(gè)參數(shù)和三個(gè)參數(shù),三個(gè)參數(shù)的方法第一個(gè)參數(shù)是tag,那么調(diào)用刪除方法的時(shí)候要和這個(gè)tag對(duì)應(yīng)上,就是要?jiǎng)h除哪條消息就傳哪個(gè)tag。

接收消息

接收消息我是重新創(chuàng)建一個(gè)類繼承自NotificationListenerService,然后復(fù)寫需要用到的幾個(gè)方法,由于我的項(xiàng)目是systemui的開發(fā),所以和實(shí)際需求上可能會(huì)略有不同。

@Override
    public void onNotificationPosted(StatusBarNotification sbn)

該方法是接收到消息通知時(shí)的回調(diào)。
我不太清楚為什么我只發(fā)送了一次通知,但在該方法中卻收到了兩次消息。那就想辦法過濾一下吧。利用sbn返回的key和time來判斷。

mPreviousNotificationKey = sbn.getKey();
mPreviousNotificationKeyTime = sbn.getPostTime();

正常創(chuàng)建兩個(gè)變量來保存該次受到的key和postTime。然后利用sp先來獲取一次上次保存的這兩個(gè)值,再把該次獲取的這兩個(gè)值利用sp存上。

 String mPreviousNotification = spHelper.getString("notificationKey");
 Long mPreviousNotificationTime = spHelper.getLong("notificationTime");
 spHelper.putValues(new SPHelper.ContentValue("notificationKey", mPreviousNotificationKey));
 spHelper.putValues(new SPHelper.ContentValue("notificationTime", mPreviousNotificationKeyTime));

然后根據(jù)兩次取值判斷:

if (mPreviousNotificationKey.equals(mPreviousNotification) && mPreviousNotificationKeyTime.equals(mPreviousNotificationTime)) {
            return;
}

兩次值一樣直接return過濾掉。

 @Override
    public void onNotificationRemoved(StatusBarNotification sbn)

該方法是接收到刪除消息的通知。
至此,結(jié)束,方便過后有類似需求查閱。

到此這篇關(guān)于Android消息通知Notification的文章就介紹到這了,更多相關(guān)Android消息通知內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

拜泉县| 望奎县| 沙河市| 蒙阴县| 凤城市| 永兴县| 柞水县| 淮安市| 敖汉旗| 屯门区| 方正县| 静宁县| 库尔勒市| 封丘县| 会理县| 镇江市| 陈巴尔虎旗| 宁蒗| 永德县| 松滋市| 通州区| 靖安县| 呼玛县| 济阳县| 深水埗区| 济宁市| 保康县| 江北区| 屏东市| 巢湖市| 资中县| 囊谦县| 涿鹿县| 漳平市| 钟山县| 朝阳区| 涿州市| 阳曲县| 石楼县| 锡林郭勒盟| 汝阳县|