安卓APP_ 控件(6)—— Notification通知
摘自:安卓APP_ 控件(6)—— Notification通知
作者:丶PURSUING
發(fā)布時(shí)間: 2021-04-02 00:30:14
網(wǎng)址:https://blog.csdn.net/weixin_44742824/article/details/115382674
Notification通知的使用
- 一、創(chuàng)建一個(gè)NotificationManager
- 二、使用Builder構(gòu)造器來(lái)創(chuàng)建Notification對(duì)象
- 三、通知渠道:NotificationCannel
- 四、通過(guò)鏈?zhǔn)浇Y(jié)構(gòu)設(shè)置notification的屬性
- (1)`setSmallIcon`應(yīng)該注意的是:
- (2)`setContentIntent`點(diǎn)擊通知后的跳轉(zhuǎn)意圖
- 五、更多細(xì)節(jié)在實(shí)例注釋中呈現(xiàn)
效果一覽
實(shí)現(xiàn)效果:點(diǎn)擊發(fā)送通知,系統(tǒng)發(fā)來(lái)通知;可以通過(guò)下拉任務(wù)欄進(jìn)行跳轉(zhuǎn)查看;也可以直接點(diǎn)擊消息進(jìn)行跳轉(zhuǎn)查看;也可以點(diǎn)擊按鈕取消通知。如下圖:
一、創(chuàng)建一個(gè)NotificationManager
NotificationManager類(lèi)是一個(gè)通知管理器類(lèi),這個(gè)對(duì)象是由系統(tǒng)維護(hù)的服務(wù),是以單例模式的方式獲得,所以一般并不直接實(shí)例化這個(gè)對(duì)象。
在A(yíng)ctivity中,可以使用getSystemService方法獲取NotificationManager對(duì)象,這個(gè)方法可以通過(guò)Android系統(tǒng)級(jí)服務(wù)的句柄返回對(duì)應(yīng)的對(duì)象。在這里需要返回NotificationManager,所以直接傳遞NOTIFICATION_SERVICE即可。
具體是實(shí)現(xiàn):
NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);- 1
NotificationManager是做格式的強(qiáng)制轉(zhuǎn)換
二、使用Builder構(gòu)造器來(lái)創(chuàng)建Notification對(duì)象
使用NotificationCompat類(lèi)的Builder構(gòu)造器來(lái)出創(chuàng)建Notification對(duì)象,可以保證程序在所有版本上都能正常工作。Android8.0新增了通知渠道這個(gè)概念,如果沒(méi)有設(shè)置,則通知無(wú)法在A(yíng)ndroid8.0的機(jī)器上顯示。
Notification notification = new NotificationCompat.Builder(this,"zhua")- 1
context:表示環(huán)境
三、通知渠道:NotificationCannel
Android8.0引入了通知渠道,其允許您為要顯示的每種通知類(lèi)型創(chuàng)建用戶(hù)可自定義的渠道。
重要的三個(gè)參數(shù):
(1)id:channelld,即為渠道id
(2)name:信息
(3)importance:通知的重要程度
通知重要程度設(shè)置是在NotificationManager類(lèi):
| NONE | × | × | × | × |
| MIN | √ | × | × | × |
| LOW | √ | × | × | √ |
| DEFAULT | √ | × | √ | √ |
| HIGH | √ | √ | √ | √ |
四、通過(guò)鏈?zhǔn)浇Y(jié)構(gòu)設(shè)置notification的屬性
即為設(shè)置通知屬性。
具體要有哪些屬性后面的實(shí)例代碼中給了很詳細(xì)的說(shuō)明。下面對(duì)兩個(gè)易錯(cuò)點(diǎn)進(jìn)行記錄。
(1)setSmallIcon應(yīng)該注意的是:
從Android5.0系統(tǒng)開(kāi)始,對(duì)于通知欄圖標(biāo)的設(shè)計(jì)進(jìn)行了修改,現(xiàn)在Google要求,所有的應(yīng)用程序的通知欄圖標(biāo),應(yīng)該只是用alpha圖層來(lái)進(jìn)行繪制,而不應(yīng)該包括RGB圖層。
要學(xué)會(huì)看參數(shù),例如下面這個(gè)就是要你傳入rbg參數(shù)進(jìn)行顏色的設(shè)置
(2)setContentIntent點(diǎn)擊通知后的跳轉(zhuǎn)意圖
我們?cè)O(shè)置了一個(gè)跳轉(zhuǎn)的界面,在新的類(lèi)中,要進(jìn)行“注冊(cè)”(不然死活不會(huì)跳轉(zhuǎn),也不報(bào)錯(cuò),很煩)
五、更多細(xì)節(jié)在實(shí)例注釋中呈現(xiàn)
activity_main.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><!-- 方法名稱(chēng)為sendNote,快捷鍵跳轉(zhuǎn)直接在java中具體實(shí)現(xiàn)--><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="sendNote"android:text="發(fā)出通知" /><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:onClick="canselNote"android:text="取消通知" /></LinearLayout>MainAvtivity.java
public class MainActivity extends AppCompatActivity {//創(chuàng)建一個(gè)全局對(duì)象:NotificationManagerprivate NotificationManager manager;//創(chuàng)建一個(gè)全局對(duì)象:notificationprivate Notification notification;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//使用getSystemService方法獲取NotificationManager對(duì)象manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);//如果是8.0及以上,我們才創(chuàng)建這個(gè)對(duì)象;(之前踩坑了,搞了個(gè)4.0版本的工程死活收不到通知)if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){NotificationChannel channel = new NotificationChannel("zhua", "測(cè)試通知",NotificationManager.IMPORTANCE_HIGH);//創(chuàng)建了channel如何使用它:用NotificationManager的通知管理類(lèi)manager.createNotificationChannel(channel);//讓channelid和manager綁定上了關(guān)系}//創(chuàng)建跳轉(zhuǎn)意圖Intent intent = new Intent(this,NotificationActivity.class);//setContentIntent跳轉(zhuǎn)意圖中需要傳入的參數(shù):pendingIntent PendingIntent pendingIntent = PendingIntent.getActivities(this, 0, new Intent[]{intent}, 0);//直接通過(guò)鏈?zhǔn)浇Y(jié)構(gòu)設(shè)置notification的屬性(設(shè)置通知的屬性)notification = new NotificationCompat.Builder(this,"zhua")//標(biāo)題(必須).setContentTitle("官方通知")//通知內(nèi)容(必須).setContentText("華天朱來(lái)了")//通知的小圖標(biāo)(必須)這個(gè)圖片不能是RGB的.setSmallIcon(R.drawable.ic_baseline_account_box_24)//通知的大圖標(biāo):這個(gè)參數(shù)需要的是圖片的bitmap類(lèi)型,所以要進(jìn)行BitmapFactory轉(zhuǎn)換.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.head))//設(shè)置通知圖標(biāo)欄圖標(biāo)為紅色:setColor傳入?yún)?shù)是argb.setColor(Color.parseColor("#ff0000"))//不是普通的intent,而是pandding intent,要在上面進(jìn)行創(chuàng)建.setContentIntent(pendingIntent)//點(diǎn)擊通知后通知會(huì)取消.setAutoCancel(true).build();}public void sendNote(View view) {//兩個(gè)參數(shù),第一個(gè)是id,點(diǎn)擊進(jìn)去發(fā)現(xiàn)沒(méi)什么要求,隨便寫(xiě)一個(gè)1manager.notify(1,notification);}public void canselNote(View view) {manager.cancel(1); //這個(gè)取消通知的id要和上面那個(gè)來(lái)通知對(duì)應(yīng)} }NotificationActivity.java
//這里自己創(chuàng)建的類(lèi),為跳轉(zhuǎn)意圖,一定要在這個(gè)地方alt+enter進(jìn)行關(guān)聯(lián) public class NotificationActivity extends Activity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);//做個(gè)簡(jiǎn)單的打印看一下效果Log.e("zhua", "onCreate: 進(jìn)入NotificationActivity" );} }總結(jié)
以上是生活随笔為你收集整理的安卓APP_ 控件(6)—— Notification通知的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【<咩咩启示录>中的距骨骰低配版】
- 下一篇: java中对map使用entrySet循