Android中的Notification(通知)

Notification 其實就是Android系統界面中最上面的那個黑條部分,如圖:



如果把 Notification 拉下來(用手指從屏幕的最上端按住並往下滑動),就會出現如下圖所示的通知中心:




你可以通過 Notification 發送一條用戶隨時可以查看的通知,就像上面兩張圖片那樣,用戶可以通過通知中心知道來了消息,但是要查看或着要忽略就隨用戶的便了。


使用 Notification 來向用戶通知某個消息,主要有兩點好處:

(1) 不會佔用App的界面空間

(2)可以通過服務(Service)來發送 Notification。這樣即使你的App已經暫停了,後臺的服務(比如下載)也可以使用Notification來隨時向用戶發送通知。



一個 Notification 的消息的組成部分如下圖:


1. 消息標題,通過 setContentTitle() 來設定。

2. 圖標(這個圖標也是消息中心沒有被拉下的時候在屏幕最上端的長黑條上顯示的圖標),通過 setSmallIcon() 來設定。

3. 消息內容,通過 setContentText() 來設定。

4. 消息信息,通過 setContentInfo() 來設定。

5. 小圖標

6. 時間,可以通過 setWhen(long) 來設定。如果想要獲取當前的時間可以傳入System.currentTimeMillis()。




那麼接下來就看看如果創建一個 Notification :

// 實例化一個NotificationCompat.Builder,NotificationCompat是
// 一個比Notification兼容性更佳的類。
NotificationCompat.Builder NotiBuilder = new NotificationCompat.Builder(this);

// 給這個Notification添加內容
NotiBuilder.setSmallIcon(R.drawable.ic_launcher);
NotiBuilder.setContentTitle("New Title");
NotiBuilder.setContentText("Hello");

// 通過NotificationManager對象來推送我們的通知
// notify()方法的第一個參數可以給我們的Notificaion指定一個ID,可以用來在日後對Notification進行修改
NotificationManager NotiManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
NotiManager.notify(123, NotiBuilder.build());


要是想要修改剛纔的這個Notification,只要通過 NotificationCompat.notify(int id, Notification notification)方法即可,在第一個參數中傳入你要修改的那個Notification的ID號:

NotiBuilder.setContentText("changed");
NotiManager.notify(123, NotiBuilder.build()); //id是你要修改的那個Notification的id


通常來通知的時候,我們打開通知中心點一下就可以執行相應的App或反饋,那麼如何製作這種響應呢?

比如我們現在要做一個點擊了以後可以彈出 activity 的通知吧,首先先創建一個activity名叫 ResultActivity :

package com.example.flappykai;

import android.app.Activity;
import android.os.Bundle;

public class ResultActivity extends Activity {
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

	}
}

然後在 AndroidManifest.xml 文件中註冊這個activity並加入如下標籤:

<application>
    …

    <activity
        android:name=".ResultActivity"
        //這個標籤是爲了支持 Android 4.0.3 之後的版本
        android:parentActivityName=".MainActivity" > 
        <meta-data 
            //這兩個標籤是爲了支持Android 4.0.3 以及更早的版本
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity" />
    </activity>
</application>

最後在 Notification 推送之前的位置加入如下代碼:

// 實例化一個NotificationCompat.Builder,NotificationCompat是
// 一個比Notification兼容性更佳的類。
NotificationCompat.Builder NotiBuilder = new NotificationCompat.Builder(this);

// 給這個Notification添加內容
NotiBuilder.setSmallIcon(R.drawable.ic_launcher);
NotiBuilder.setContentTitle("New Title");
NotiBuilder.setContentText("Hello");

/*****************/
/**新加入的部分***/
/*****************/
//創先一個intent,用它連接那個點了通知以後要彈出的Activity的類
Intent resultIntent = new Intent(this, ResultActivity.class);
//加入一個用來保護現場的任務棧
TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
stackBuilder.addParentStack(ResultActivity.class);
//把剛纔創建的intent傳入棧中
stackBuilder.addNextIntent(resultIntent);
//獲取一個包含整個兒任務棧的的PendingIntent
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT);
//將創建好的PendingIntent傳給NotiBuilder,這樣點擊了通知後就會執行這個PendingIntent
NotiBuilder.setContentIntent(resultPendingIntent);


// 通過NotificationManager對象來推送我們的通知
// notify()方法的第一個參數可以給我們的Notificaion指定一個ID,可以用來在日後對Notification進行修改
NotificationManager NotiManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
NotiManager.notify(123, NotiBuilder.build());





如果轉載請註明出處:http://blog.csdn.net/gophers/article/details/22282727




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章