android之Notification通知

咱們在用手機的時候,若是來了短信,而咱們沒有點擊查看的話,是否是在手機的最上邊的狀態欄裏有一個短信的小圖標提示啊?你是否是也想實現這種功能呢?今天的Notification就是解決這個問題的。java

package cn.com.chenzheng_java;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore.Audio;
import android.view.View;
import android.widget.Button;

/***
 * @description 狀態欄通知相關
 * @author chenzheng_java
 * 
 */
public class NotificationActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.notification);

        Button button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                addNotificaction();

            }
        });

    }
    
    
    

    /**
     * 添加一個notification
     */
    private void addNotificaction() {
        NotificationManager manager = (NotificationManager) this
        .getSystemService(Context.NOTIFICATION_SERVICE);
        // 建立一個Notification
        Notification notification = new Notification();
        // 設置顯示在手機最上邊的狀態欄的圖標
        notification.icon = R.drawable.excel;
        // 噹噹前的notification被放到狀態欄上的時候,提示內容
        notification.tickerText = "注意了,我被扔到狀態欄了";
        
        /***
         * notification.contentIntent:一個PendingIntent對象,當用戶點擊了狀態欄上的圖標時,該Intent會被觸發
         * notification.contentView:咱們能夠不在狀態欄放圖標而是放一個view
         * notification.deleteIntent 噹噹前notification被移除時執行的intent
         * notification.vibrate 當手機震動時,震動週期設置
         */
        // 添加聲音提示
        notification.defaults=Notification.DEFAULT_SOUND;
        // audioStreamType的值必須AudioManager中的值,表明着響鈴的模式
        notification.audioStreamType= android.media.AudioManager.ADJUST_LOWER;
        
        //下邊的兩個方式能夠添加音樂
        //notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3"); 
        //notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6"); 
        Intent intent = new Intent(this, Notification2Activity.class);
        PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);
        // 點擊狀態欄的圖標出現的提示信息設置
        notification.setLatestEventInfo(this, "內容提示:", "我就是一個測試文件", pendingIntent);
        manager.notify(1, notification);
        
    }

}

點擊按鈕時候,狀態欄會顯示:android

看到了吧,狀態欄多出來一個excel圖標,當我按住圖標不放,往下拖動的時候,出來了這個頁面app

而後,當咱們點擊這個對話框以後,就會觸發intent,跳轉到Notification2Activity.java這個activity。ide

----------------------------------------------------------------------------------------測試

注意,NotificationManager裏的notify(id,notification)中的id是用來惟一標識咱們當前的這個notification的標識符,咱們經過cancel方法刪除通知時,傳遞的就是這個值。可能讀者在看不少文檔的時候,發現這個地方指定了一個莫名奇妙的值,例如R.drawable.icon,不少朋友就納悶了,爲何這裏要指定一個圖片呢。這裏筆者就介紹下,爲何呢?this

 答案其實很簡單,咱們都知道,咱們這裏對參數的惟一要求就是,這個id要和notify方法中的一致,而且是惟一;只要知足了這兩項,其餘的都無所謂。notify和cancel裏一致咱們做爲開發者,太好控制了,可是惟一呢,咱們還真很差說,因而這裏就有些人動小腦筋了,很巧妙的用了咱們系統中的圖片資源或者其餘資源的索引ID,咱們都知道,這些值確定都是惟一的!spa

------------------------------------------------------------------------------------------.net

 

下面是從網上找的一些資料:excel

 

  若是要添加一個Notification,能夠按照如下幾個步驟code

1:獲取NotificationManager:

NotificationManager m_NotificationManager=(NotificationManager)this.getSystemService(NOTIFICATION_SERVICE);

2:定義一個Notification:

  Notification  m_Notification=new Notification();

3:設置Notification的各類屬性:

 //設置通知在狀態欄顯示的圖標
m_Notification.icon=R.drawable.icon;
                
 //當咱們點擊通知時顯示的內容
m_Notification.tickerText="Button1 通知內容.....";
                                
通知時發出的默認聲音
m_Notification.defaults=Notification.DEFAULT_SOUND;

//設置通知顯示的參數

Intent   m_Intent=new Intent(NotificationDemo.this,DesActivity.class);       
PendingIntent m_PendingIntent=PendingIntent.getActivity(NotificationDemo.this, 0, m_Intent, 0);

m_Notification.setLatestEventInfo(NotificationDemo.this, "Button1", "Button1通知",m_PendingIntent );

//這個能夠理解爲開始執行這個通知
m_NotificationManager.notify(0,m_Notification);

4:既然能夠增長一樣咱們也能夠刪除。固然是隻是刪除你本身增長的。

  m_NotificationManager.cancel(0);   

  這裏的0是一個ID號碼,和notify第一個參數0同樣。

這也就完成了,添加刪除工做。

 

------------------------------------------------------------------------------------------------------

NoticificationManager很容易能夠放在狀態欄,也很容易實現從statusbar進入程序 中, 
NoticificationManager中經過intent執行此程序的activity就能夠了

NoticificationManager狀態欄操做

NotificationManager(通知管理器): 
NotificationManager負責通知用戶事件的發生. 
NotificationManager有三個公共方法: 
1. cancel(int id) 取消之前顯示的一個通知.假如是一個短暫的通知,試圖將隱藏,假如是一個持久的通知,將從狀態條中移走. 
2. cancelAll() 取消之前顯示的全部通知. 
3. notify(int id,  Notification notification) 把通知持久的發送到狀態條上.


//初始化NotificationManager: 
NotificationManager nm = 
      (NotificationManager)getSystemService(NOTIFICATION_SERVICE);

Notification表明着一個通知. 
Notification的屬性: 
audioStreamType 當聲音響起時,所用的音頻流的類型 
contentIntent 當通知條目被點擊,就執行這個被設置的Intent. 
contentView 當通知被顯示在狀態條上的時候,同時這個被設置的視圖被顯示. 
defaults 指定哪一個值要被設置成默認的. 
deleteIntent 當用戶點擊"Clear All Notifications"按鈕區刪除全部的通知的時候,這個被設置的Intent被執行. 
icon 狀態條所用的圖片. 
iconLevel 假如狀態條的圖片有幾個級別,就設置這裏. 
ledARGB LED燈的顏色. 
ledOffMS LED關閉時的閃光時間(以毫秒計算) 
ledOnMS LED開始時的閃光時間(以毫秒計算) 
number 這個通知表明事件的號碼 
sound 通知的聲音 
tickerText 通知被顯示在狀態條時,所顯示的信息 
vibrate 振動模式. 
when 通知的時間戳.

將Notification發送到狀態條上: 
Notification notification = new Notification(); 
Notification的設置過程…….. 
nm.notify(0, notification);   //發送到狀態條上

 

------------------------------------------------------------------------------------------------------------

Notification提供了豐富的手機提示方式:

a)在狀態欄(Status Bar)顯示的通知文本提示,如:

notification.tickerText = "hello";

 

b)發出提示音,如:

notification.defaults = Notification.DEFAULT_SOUND;

notification.sound = Uri.parse("file:///sdcard/notification/ringer.mp3");

notification.sound = Uri.withAppendedPath(Audio.Media.INTERNAL_CONTENT_URI, "6");

 

c)手機振動,如:

notification.defaults = Notification.DEFAULT_VIBRATE;

long[] vibrate = {0,100,200,300};

notification.vibrate = vibrate;

 

d)LED燈閃爍,如:

notification.defaults = Notification.DEFAULT_LIGHTS;

notification.ledARGB = 0xff00ff00;

notification.ledOnMS = 300;

notification.ledOffMS = 1000;

notification.flags = Notification.FLAG_SHOW_LIGHTS;

 

4)發送通知:

private static final int ID_NOTIFICATION = 1;

mNotificationManager.notify(ID_NOTIFICATION, notification);

 

轉自:http://blog.csdn.net/chenzheng_java/article/details/6249357

相關文章
相關標籤/搜索