初识Notification
生活随笔
收集整理的這篇文章主要介紹了
初识Notification
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
通知(Notification)是 Android 系統中比較有特色的一個功能,當某個應用程序希望向用戶發出一些提示信息,而該應用程序又不在前臺運行時,就可以借助通知來實現。發出一條通知后,手機最上方的狀態欄中會顯示一個通知的圖標,下拉狀態欄后可以看到通知的詳細內容。 ? 通知的基本用法 ? 既可以在活動里創建,也可以在廣播接收器里創建,相比于廣播接收器和服務,在活動里創建通知的場景還是比較少的,因為一般只有當程序進入到后臺的時候我們才需要使用通知。論是在哪里創建通知,整體的步驟都是相同的。 import android.app.Activity; import android.app.Notification; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.RemoteViews; publicclassMyNotificationActivityextendsActivity{ privateButton btn_notify1; privateNotificationManager nManager; privateNotification notification ; @Override protectedvoid onCreate(Bundle savedInstanceState){ // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.layout_notification); //得到notification管理器 nManager =(NotificationManager) getSystemService(NOTIFICATION_SERVICE); btn_notify1 =(Button)findViewById(R.id.btn_notify1); btn_notify1.setOnClickListener(newOnClickListener(){ @Override publicvoid onClick(View v){ // TODO Auto-generated method stub PendingIntent piIntent =PendingIntent.getActivity(MyNotificationActivity.this,1,newIntent(MyNotificationActivity.this,FormActivity.class),1); /*Notification notification = new Notification(R.drawable.p2409, "You have a message", System.currentTimeMillis()); notification.setLatestEventInfo(MyNotificationActivity.this, "Racoon", "Love U", piIntent); */ //創建notification實例 notification =newNotification.Builder(MyNotificationActivity.this) .setContentText("Love U") .setContentTitle("little Racoon") .setTicker("You have a new message") .setSmallIcon(R.drawable.peasy)//狀態欄的圖標 .setContentIntent(piIntent) .getNotification(); notification.contentView =newRemoteViews(getPackageName(), R.layout.layout_customnotification); //把notification發布到狀態欄 nManager.notify(1, notification); } }); } @Override protectedvoid onStop(){ // TODO Auto-generated method stub nManager.cancelAll(); super.onStop(); } } <?xml version="1.0" encoding="utf-8"?> <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <Button android:id="@+id/btn_notify1" style="?android:attr/buttonStyleSmall" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Common notify"/> </LinearLayout> 現在就可以來運行一下程序了,點擊 Common notify 按鈕,就會看到有一條通知在系統狀態欄顯示出來,如圖所示。 下拉系統狀態欄可以看到該通知的詳細信息,如圖所示 如果你使用過 Android 手機,此時應該會下意識地認為這條通知是可以點擊的。但是當你去點擊它的時候,你會發現沒有任何效果。不對啊,好像每條通知點擊之后都應該會有反應的呀?其實要想實現通知的點擊效果,我們還需要在代碼中進行相應的設置,這就涉及到了一個新的概念,PendingIntent。 ? PendingIntent 從名字上看起來就和 Intent 有些類似,它們之間也確實存在著不少共同點。比如它們都可以去指明某一個“意圖”,都可以用于啟動活動、啟動服務以及發送廣播等。不同的是,Intent 更加傾向于去立即執行某個動作,而 PendingIntent 更加傾向于在某個合適的時機去執行某個動作。所以,也可以把 PendingIntent 簡單地理解為延遲執行的 Intent。PendingIntent并不是Intent! ? ? PendingIntent 的用法同樣很簡單,它主要提供了幾個靜態方法用于獲取 PendingIntent 的實例,可以根據需求來選擇是使用 getActivity()方法、getBroadcast()方法、還是 getService()方法。這幾個方法所接收的參數都是相同的,第一個參數依舊是 Context,不用多做解釋。第二個參數一般用不到,通常都是傳入 0 即可。第三個參數是一個 Intent 對象,我們可以通過這個對象構建出 PendingIntent 的“意圖”。第四個參數用于確定 PendingIntent 的行為,有FLAG_ONE_SHOT、FLAG_NO_CREATE、FLAG_CANCEL_CURRENT 和 FLAG_UPDATE_CURRENT 這四種值可選,每種值的含義你可以查看文檔。 ? 怎么系統狀態上的通知圖標還沒有消失呢?是這樣的,如果我們沒有在代碼中對該通知進行取消,它就會一直顯示在系統的狀態欄上顯示。解決的方法也很簡單,調用NotificationManager 的 cancel()方法就可以取消通知了。 ? ?
- 首先需要一個 NotificationManager 來對通知進行管理,可以調用 Context 的getSystemService()方法獲取到。getSystemService()方法接收一個字符串參數用于確定獲取系統的哪個服務,這里我們傳入 Context.NOTIFICATION_SERVICE 即可。因此,獲取NotificationManager 的實例就可以寫成:
- 接下來需要創建一個 Notification 對象,這個對象用于存儲通知所需的各種信息,我們可以使用它的有參構造函數來進行創建。Notification 的有參構造函數接收三個參數,第一個參數用于指定通知的圖標,比如項目的 res/drawable 目錄下有一張 icon.png 圖片,那么這里就可以傳入 R.drawable.icon。第二個參數用于指定通知的 ticker 內容,當通知剛被創建的時候,它會在系統的狀態欄一閃而過,屬于一種瞬時的提示信息。第三個參數用于指定通知被創建的時間,以毫秒為單位,當下拉系統狀態欄時,這里指定的時間會顯示在相應的通知上。因此,創建一個 Notification 對象就可以寫成:? ??
- 創建好了 Notification 對象后,我們還需要對通知的布局進行設定,這里只需要調用Notification 的 setLatestEventInfo()方法就可以給通知設置一個標準的布局。這個方法接收四個參數,第一個參數是 Context,這個沒什么好解釋的。第二個參數用于指定通知的標題內容,下拉系統狀態欄就可以看到這部分內容。第三個參數用于指定通知的正文內容,同樣下拉系統狀態欄就可以看到這部分內容。第四個參數我們暫時還用不到,可以先傳入 null。因此,對通知的布局進行設定就可以寫成:
- 以上工作都完成之后,只需要調用 NotificationManager 的 notify()方法就可以讓通知顯示出來了。notify()方法接收兩個參數,第一個參數是 id,要保證為每個通知所指定的 id 都是不同的。第二個參數則是 Notification 對象,這里直接將我們剛剛創建好的 Notification 對象傳入即可。因此,顯示一個通知就可以寫成:
轉載于:https://www.cnblogs.com/izhanjun/p/4225153.html
總結
以上是生活随笔為你收集整理的初识Notification的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【转】TLB(Translation L
- 下一篇: 函数和原型