Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android資訊 >> Android Notification 用法的4種形式

Android Notification 用法的4種形式

編輯:Android資訊

Android Notification在每一個Android應用開發中基本都會遇到,它可以按指定的規則向用戶推送一些消息,是一項非常實用的功能。本文主要介紹了Android Notification 用法的4種形式,希望可以對各位Android開發者有所幫助。

實現通知一般有以下幾個步驟:

  • 1.獲取通知服務對象NotificationManager
  • 2.建立Notification對象
  • 3.關聯intent
  • 4.執行通知

Notification一般有幾種用途:,如下圖

1.啟動多次通知但只顯示一條

如果有很多通知的內容一樣,為了不影響系統通知顯示的列表過多,可以進行計數堆積,只顯示一條,代碼如下:

btn1.setOnClickListener(new View.OnClickListener() {      
            @Override  
            public void onClick(View v) {  
                count++;  
                //從系統服務中獲得通知管理器  
                NotificationManager nm=(NotificationManager)MainActivity.this.getSystemService(Context.NOTIFICATION_SERVICE);  
                //定義notification  
                Notification n=new Notification(R.drawable.ic_launcher,"我是通知提示",System.currentTimeMillis());  
                n.flags=Notification.FLAG_AUTO_CANCEL;  
                n.number=count;  
                //通知消息與Intent關聯  
                Intent it=new Intent(MainActivity.this,Second.class);  
                it.putExtra("name", "name:"+count);  
                PendingIntent pi=PendingIntent.getActivity(MainActivity.this, 100, it, PendingIntent.FLAG_CANCEL_CURRENT);  
                //具體的通知內容  
                n.setLatestEventInfo(MainActivity.this, "標題", "啟動多次通知只顯示一條",pi);  
                //執行通知  
                nm.notify(1, n);  

            }  
        });

點擊4次後,效果如下:

這是由於nm.notify(1,n)的requestCode全相同導致的。

2.啟動多次通知,並且顯示多條,但只能用最新的一條跳轉至活動

btn2.setOnClickListener(new View.OnClickListener() {      
            @Override  
            public void onClick(View v) {  
                count++;  
                //從系統服務中獲得通知管理器  
                NotificationManager nm=(NotificationManager)MainActivity.this.getSystemService(Context.NOTIFICATION_SERVICE);  
                //定義notification  
                Notification n=new Notification(R.drawable.ic_launcher,"我是通知提示",System.currentTimeMillis());  
                n.flags=Notification.FLAG_AUTO_CANCEL;  
                n.number=count;  
                //通知消息與Intent關聯  
                Intent it=new Intent(MainActivity.this,Second.class);  
                it.putExtra("name", "name:"+count);  
                PendingIntent pi=PendingIntent.getActivity(MainActivity.this, 100, it, PendingIntent.FLAG_CANCEL_CURRENT);  
                //具體的通知內容  
                n.setLatestEventInfo(MainActivity.this, "標題", "啟動多次通知顯示多條,但只能用最新的通知跳轉到活動",pi);  
                //執行通知  
                nm.notify(count, n);  

            }  
        });

結果如下:

點擊第5,6條通知均不會跳轉,只有點擊第7條才可跳轉。

而這是由於PendingIntent的RequestCode相同而導致的。

3.啟動多次通知,並且顯示多條,每一條通知都能跳轉至對應的活動

btn3.setOnClickListener(new View.OnClickListener() {      
            @Override  
            public void onClick(View v) {  
                count++;  
                //從系統服務中獲得通知管理器  
                NotificationManager nm=(NotificationManager)MainActivity.this.getSystemService(Context.NOTIFICATION_SERVICE);  
                //定義notification  
                Notification n=new Notification(R.drawable.ic_launcher,"我是通知提示",System.currentTimeMillis());  
                n.flags=Notification.FLAG_AUTO_CANCEL;  
                n.number=count;  
                //通知消息與Intent關聯  
                Intent it=new Intent(MainActivity.this,Second.class);  
                it.putExtra("name", "name:"+count);               
                PendingIntent pi=PendingIntent.getActivity(MainActivity.this, count, it, PendingIntent.FLAG_CANCEL_CURRENT);  
                //具體的通知內容  
                n.setLatestEventInfo(MainActivity.this, "標題", "啟動多次通知顯示多條,每一條通知都能跳轉到對應的活動",pi);  
                //執行通知  
                nm.notify(count, n);  

            }  
        });

由於nm.notify(count,n)的code每次都不一樣,相當於為每一個通知關聯了一個屬於自己的intent,結果和上圖一致,只是每一個通知都可跳轉至對應活動。

4,自定義布局

下圖中的第一條通知就是自定義的:

自定義布局方式的通知和普通的方式唯一的區別就是加載了一個RemoteView,片段如下:

RemoteViews rv=new RemoteViews(MainActivity.this.getPackageName(),R.layout.notify);  
                n.contentView=rv;  
                //通知消息與Intent關聯  
                Intent it=new Intent(MainActivity.this,Second.class);  
                it.putExtra("name", "name:"+count);               
                PendingIntent pi=PendingIntent.getActivity(MainActivity.this, count, it, 0);  
                n.contentIntent=pi;

這個自定義通知我本來想實現定義一個按鈕,點擊按鈕後取消通知。我的思路如下:

由於RemoteView並沒沒有類似findViewById的方法,所以我沒辦法找到新加載的布局文件上的控件,更沒辦法為其添加按鈕事件。

但是在關聯intent的時候,PendingIntent提供了較多的方法,其中主要有:

可以看到,可以關聯三大組件。

再者,RemoteView雖然沒有findViewById,但是他有setOnClickFillInIntent和setOnClickPendingIntent兩個方法

我先建立了一個廣播

//注冊廣播  
        BroadcastReceiver b=new BroadcastReceiver(){  
            @Override  
            public void onReceive(Context context, Intent intent) {  

                Toast.makeText(context, "button被點擊了", 3000).show();  
            }  

        };  
        IntentFilter filter=new IntentFilter();  
        filter.addAction("ONCLICK");  
        this.registerReceiver(b, filter);

然後在nm.notify後繼續設置控件的事件

//執行通知  
                nm.notify(count, n);  
                //設置控件  
                rv.setTextViewText(R.id.tv2, "我是自定義布局");  

                Intent clickIntent=new Intent("ONCLICK");  

                PendingIntent clickPending=PendingIntent.getBroadcast(MainActivity.this, count, clickIntent, 0);  
                rv.setOnClickPendingIntent(R.id.cancel, clickPending);

結果並沒有執行,廣播根本沒接收到,我感覺代碼是沒有問題的,查看了下setOnClickPendingIntent,竟然說對LisetView等控件的事件不起作用,又查看了setOnClickFillInIntent,這個貌似有用,系統還推薦了另外一個與之類似的方法,由於level級別不夠,不能使用,我也就沒有驗證,應該是可以的,不然那麼多應用好看的通知都是咋做的啊,先記下來,以後有需求的時候好好研究下。

參考代碼:http://download.csdn.net/detail/kkkkkxiaofei/6723903

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved