亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

Notification

#前言

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

發(fā)送消息

發(fā)送消息利用NotificationManager類(lèi)的notify方法來(lái)實(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類(lèi)型(api已過(guò)時(shí)),charText類(lèi)型和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過(guò)去,第一個(gè)參數(shù)傳按鈕的顏色值,第二個(gè)參數(shù)傳按鈕的名稱(chēng),第三個(gè)參數(shù)傳pendingIntent意圖。這樣就不用很復(fù)雜的實(shí)現(xiàn)邏輯就可以完成這個(gè)公共的彈窗。
同樣,builder支持傳bundle,方法如下:

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

bundle可以攜帶參數(shù),同理剛才說(shuō)的封裝公共彈窗也可以用bundle傳值的形式實(shí)現(xiàn),但是相比較action的方式是不是就會(huì)復(fù)雜很多。
bundle可以傳遞一些公共的參數(shù),比如一個(gè)type,當(dāng)接收到通知的時(shí)候利用type來(lái)區(qū)分要做什么動(dòng)作,這個(gè)就看項(xiàng)目實(shí)際需求了。
這里我把通知跳轉(zhuǎn)意圖的跳轉(zhuǎn)activity和接收廣播的代碼放上來(lái),也為自己做個(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è)類(lèi)繼承自NotificationListenerService,然后復(fù)寫(xiě)需要用到的幾個(gè)方法,由于我的項(xiàng)目是systemui的開(kāi)發(fā),所以和實(shí)際需求上可能會(huì)略有不同。

@Override
    public void onNotificationPosted(StatusBarNotification sbn)

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

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

正常創(chuàng)建兩個(gè)變量來(lái)保存該次受到的key和postTime。然后利用sp先來(lái)獲取一次上次保存的這兩個(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過(guò)濾掉。

 @Override
    public void onNotificationRemoved(StatusBarNotification sbn)

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

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

相關(guān)文章

  • Android源碼使用16進(jìn)制進(jìn)行狀態(tài)管理的方法

    Android源碼使用16進(jìn)制進(jìn)行狀態(tài)管理的方法

    這篇文章主要介紹了Android源碼使用16進(jìn)制進(jìn)行狀態(tài)管理的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • Android開(kāi)發(fā)準(zhǔn)確獲取手機(jī)IP地址的兩種方式

    Android開(kāi)發(fā)準(zhǔn)確獲取手機(jī)IP地址的兩種方式

    這篇文章主要介紹了Android開(kāi)發(fā)準(zhǔn)確獲取手機(jī)IP地址的兩種方式,需要的朋友可以參考下
    2020-03-03
  • 修改Android中hosts文件的步驟詳解

    修改Android中hosts文件的步驟詳解

    有朋友問(wèn)Android怎么修改Hosts?對(duì)于這個(gè)問(wèn)題,由于手頭并沒(méi)有Android設(shè)備,所以只能從網(wǎng)上搜羅了方法并總結(jié)出來(lái),下面這篇文章主要介紹了修改Android中hosts文件的步驟,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-02-02
  • Android 控制ScrollView滾動(dòng)的實(shí)例詳解

    Android 控制ScrollView滾動(dòng)的實(shí)例詳解

    這篇文章主要介紹了Android 控制ScrollView滾動(dòng)的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • Android自定義View實(shí)現(xiàn)拖動(dòng)自動(dòng)吸邊效果

    Android自定義View實(shí)現(xiàn)拖動(dòng)自動(dòng)吸邊效果

    這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)拖動(dòng)自動(dòng)吸邊效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • Android自定義View實(shí)現(xiàn)隨手勢(shì)滑動(dòng)控件

    Android自定義View實(shí)現(xiàn)隨手勢(shì)滑動(dòng)控件

    這篇文章主要為大家詳細(xì)介紹了Android自定義View實(shí)現(xiàn)隨手勢(shì)滑動(dòng)的控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-02-02
  • Kotlin使用TransitionDrawable實(shí)現(xiàn)顏色漸變效果流程講解

    Kotlin使用TransitionDrawable實(shí)現(xiàn)顏色漸變效果流程講解

    這篇文章主要介紹了Kotlin使用TransitionDrawable實(shí)現(xiàn)顏色漸變效果,這里,我們通過(guò)TransitionDrawable顯示顏色漸變效果,包括背景顏色的變化,以及圖片與圖片的漸變效果
    2023-02-02
  • 手把手教你實(shí)現(xiàn)Android編譯期注解

    手把手教你實(shí)現(xiàn)Android編譯期注解

    今天給大家介紹Android編譯期注解sdk的步驟以及注意事項(xiàng),并簡(jiǎn)要分析了運(yùn)行時(shí)注解以及字節(jié)碼技術(shù)在生成代碼上與編譯期注解的不同與優(yōu)劣,感興趣的朋友一起看看吧
    2021-07-07
  • 詳細(xì)分析Android中onTouch事件傳遞機(jī)制

    詳細(xì)分析Android中onTouch事件傳遞機(jī)制

    相信不少朋友在剛開(kāi)始學(xué)習(xí)Android的時(shí)候,對(duì)于onTouch相關(guān)的事件一頭霧水。分不清onTouch(),onTouchEvent()和OnClick()之間的關(guān)系和先后順序,所以覺(jué)得有必要搞清onTouch事件傳遞的原理。經(jīng)過(guò)一段時(shí)間的琢磨以及相關(guān)博客的介紹,這篇文章就給大家詳細(xì)的分析介紹下。
    2016-10-10
  • 使用UITextField限制輸入金額是正確小數(shù)

    使用UITextField限制輸入金額是正確小數(shù)

    通過(guò)我們使用正則表達(dá)式和textfield的方法判斷輸入金額是否為正確的金額,今天小編給大家使用UITextField限制輸入金額是正確小數(shù),有需要的朋友可以參考下
    2016-05-05

最新評(píng)論