Android中Notification 通知的使用

1.1    Notification 通知

1.1.1  簡介

分類:

1.      最普通的通知

2.      帶進度條的通知

3.      多行文本通知

4.      大圖片通知

5.      自定義顯示內容的通知

使用方式:

1.      創建通知對象

2.      設置通知對象的各種信息

3.      發送通知

 

創建通知對象的方式:

NotificationCompat.Builder nb = new NotificationCompat.Builder(this);

 

設置通知對象的各種信息的方式:

 

         //注意:以下6點信息的設置,必須要寫小圖標,其餘的可選擇性省略

            nb.setContentTitle("設置標題"+System.currentTimeMillis());

            //設置大圖標

            nb.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher));

            nb.setContentText("內容文本部分 ");

            //設置info信息,即設置顯示在時間右下角的文字

            nb.setContentInfo("info信息");

            //設置小圖標

            nb.setSmallIcon(R.drawable.pic5);

            //設置通知時間

            nb.setWhen(System.currentTimeMillis());

           

            nb.setTicker("滾動提示文字");

            //永遠不能手動移除

         nb.setOngoing(true);

 

發送通知的方式:

 

a.      獲取用於發送通知的NotifycationManager對象

/*

       * Android中獲取**Manager的方式:

       * 調用getSystemService方法進行獲取

       * 在參數指定對應的Service靜態常量即可

       * 如要獲取NotificationManager那麼就指定Service.NOTIFICATION_SERVICE

       * */

      manager = (NotificationManager)getSystemService(Service.NOTIFICATION_SERVICE);

b.      通過NotifycationManager對象對象調用notify方法發送

/*

             * 1. 可以選擇使用String類型或者int類型

             * 作用:用來設置當前發送的通知的唯一標識

             *

             * 此唯一標識的作用:

             * 當多次按鈕時,多次發送,如果id相同,那麼最終在通知欄中只會有一條通知

             * 如果id不相同,那麼發送多少次,通知欄中就會有幾條通知

             * 2.要發送的通知對象

             * */

            num++; 

            manager.notify(num, nb.build());

 

1.1.2  NotificationManager 通知管理器

概念:用於管理和發佈消息通知

NotificationManager nm =(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

nm.notify(int, Notification):發佈通知

         參數1:id,通知的編號,用於區分不同的通知對象

         參數2:notification,通知對象

1.1.3  通知的分類

1、普通通知

         創建Builder對象

                   Notification.Builderbuilder = new Notification.Builder(Context):創建Builder對象(API11)

                   NotificationCompat.Builder builder = newNotificationCompat.Builder(Context):創建Builder對象(向下兼容)

         builder.setContentTitle(CharSequence): 標題

         builder.setContentText(CharSequence):通知內容

         builder.setSmallIcon(int):小圖標

         builder.setLargeIcon(Bitmap):大圖標

         builder.setWhen():時間,如果不設置,則默認顯示當前的系統時間

         builder.setOngoing(boolean):設置是否不能消除該通知

         builder.setContentIntent(PendingIntent):設置PendingIntent對象

         Notificationnotification = builder.build():創建Notification對象

2、大圖片通知

         BigPictureStylebigPictureStyle = new BigPictureStyle(builder);

         bigPictureStyle.bigPicture(Bitmap);

3、多行文字通知

         InboxStyleinboxStyle = new InboxStyle(builder);

         inboxStyle.setBigContentTitle(CharSequence):多行文字的標題

         inboxStyle.addLine(CharSequence):多行文字的內容

4、進度通知

         setProgress(intmax, int progress, boolean indeterminate):設置進度

         PS:每次設置進度後都需要重新發布更新顯示

5、自定義通知

         RemoteViews views =new RemoteViews(String packageName, int layoutId);

                   參數1:packageName,包名

                   參數2:layoutId,佈局文件的資源id

         builder.setContent(RemoteViews);

 

1.1.4  Notifycation 小圖標的處理補充:

nb.setSmallIcon(icon,level)  實現效果:可以根據指定的參數二level的不同,選擇顯示不同的小圖標

在res—drawable文件夾中創建以下xml文件,名爲icon_level.xml

 

<level-list xmlns:android="http://schemas.android.com/apk/res/android">

   

    <!--

    通過level-list指定圖標的顯示級別問題

    drawable屬性用於指定要顯示文字

    maxLevel用於用於指定最大的顯示幾倍

    稍後通過NotificationCompat.Builder對象調用setSmallIcon(R.drawable.icon_level,2)

    方法設置要顯示的小圖標時,通過參數二指定的level級別到此文件中依次判斷符合條件的maxLevel,找到符合的後,顯示

    對應的drawable圖片

    注:

    1. maxLevel爲最大幾倍,即如果指定的level3,那麼按照當前寫法,符合maxLevel4的條件

    顯示對應的pic1圖片

    2. maxLevel值越大的item代碼越往後寫,否則,滿足條件後後面的item不再判斷

   

     -->

    

    <item android:drawable="@drawable/pic0"android:maxLevel="2"></item>

    <item android:drawable="@drawable/pic1"android:maxLevel="4"></item>

    <item android:drawable="@drawable/pic2"android:maxLevel="6"></item>

</level-list>

 

在代碼中:nb.setSmallIcon(R.drawable.icon_level, 3);

 

注:如果不記得icon_level.xml文件中具體要添加什麼樣的標籤和屬性,可以選擇打開api幫助文件,搜索LevelListDrawable類,在該類的文檔中有直接的例子

 

 

1.1.5  通知示例詳解

public class MainActivity extends Activity {

 

         NotificationManagermanager//通知管理器,用於發送通知Notification對象

         private intnum;

         @Override

         protected voidonCreate(Bundle savedInstanceState) {

                   super.onCreate(savedInstanceState);

                   setContentView(R.layout.activity_main);

                   /*

                    * Android中獲取**Manager的方式:

                    * 調用getSystemService方法進行獲取

                    * 在參數指定對應的Service靜態常量即可

                    * 如要獲取NotificationManager那麼就指定Service.NOTIFICATION_SERVICE

                    * */

                   manager =(NotificationManager)getSystemService(Service.NOTIFICATION_SERVICE);

         }

 

         public voidclick_Notification(View v){

                   switch (v.getId()) {

                   case R.id.btn_no_common://發送一個普通通知

                            Log.i("===", "====測試日誌信息");

                            btn_no_common();

                            break;

                   case R.id.btn_no_remove:

                            //移除通知

                            manager.cancel(num);

                            break;

                   case R.id.btn_no_bigicon:

                            //設置大圖通知

                            btn_no_bigicon();

                            break;

                   case R.id.btn_no_progress:

                            //發送帶進度條的通知

                            btn_no_progress();

                            break;

                   case R.id.btn_no_multi:

                            //封裝多行文本樣式

                            btn_no_multi();

                            break;

                   case R.id.btn_no_custom:

                            //完全自定義的通知

                            btn_no_custom();

                            break;

                   }

         }

 

1.1.5.1 普通通知

         private voidbtn_no_common(){

                   //1、創建通知對象

                   NotificationCompat.Buildernb = new NotificationCompat.Builder(this);

                   //2、設置通知對象的各種信息

                   //注意:以下6點信息的設置,必須要寫小圖標,其餘的可選擇性省略

                   nb.setContentTitle("設置標題"+System.currentTimeMillis());

                   //設置大圖標

                   nb.setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher));

                   nb.setContentText("內容文本部分");

                   //設置info信息,即設置顯示在時間右下角的文字

                   nb.setContentInfo("info信息");

                   //必須要設置的小圖標

                   nb.setSmallIcon(R.drawable.th_28adb914);

                   //設置通知時間

                   nb.setWhen(System.currentTimeMillis());

                  

                   //設置聲音和振動

                   nb.setDefaults(Notification.DEFAULT_SOUND|Notification.DEFAULT_VIBRATE);

                  

                   nb.setTicker("設置滾動提示的文字");

                   //不能手動移除,模態,需要代碼控制

                   //nb.setOngoing(true);

                   num++;

                   manager.notify(num,nb.build());   //發送通知

         }

 

1.1.5.2 移除通知

manager.cancel(num);

 

1.1.5.3 設置大圖通知

         private voidbtn_no_bigicon(){

                  BigPictureStylestyle = newBigPictureStyle();

                   style.bigPicture(BitmapFactory.decodeResource(getResources(),R.drawable.th_28adb914));

                   NotificationCompat.Builder nb_big = newNotificationCompat.Builder(this);

                   nb_big.setStyle(style);

                   nb_big.setSmallIcon(R.drawable.ic_launcher);

                   nb_big.setContentTitle("大圖片通知");

                   nb_big.setTicker("大圖通知來了");

                  

                   manager.notify(7, nb_big.build());

         }

 

1.1.5.4 進度條的通知

         private voidbtn_no_progress(){

                   final NotificationCompat.Builder nb2=new NotificationCompat.Builder(this)

                   .setSmallIcon(R.drawable.ic_launcher)

                   .setContentTitle("帶進度條的通知")

                   /**

                    * 向進度中添加進度條

                    * 1.最大值

                    * 2.當前值

                    * 3、進度條是否模糊顯示

                    */

                  .setProgress(100, 0, false);

                   manager.notify(3, nb2.build());

                  

                   new Thread(newRunnable() {

                           

                            @Override

                            public voidrun() {

                                     // TODO Auto-generated method stub

                                     for(inti=0;i<=100;i++){

                                               nb2.setProgress(100,i, false);

                                               manager.notify(3, nb2.build());

                                               SystemClock.sleep(500);

                                     }

                            }

                   }).start();

         }

1.1.5.5 多行文本樣式

         private voidbtn_no_multi(){

                  InboxStyle style = new InboxStyle();

                   for(inti=0;i<10;i++){

                            style.addLine("這是第"+i+""+"文本");

                   }

                   style.setBigContentTitle("多行文本標題標題");

                  

                   NotificationCompat.Buildernb3 = new NotificationCompat.Builder(this)

                   .setSmallIcon(R.drawable.ic_launcher)

                   .setContentTitle("多行文本")

                   .setStyle(style)

                   //設置聲音和振動

                   .setDefaults(Notification.DEFAULT_VIBRATE);;

                  

                   manager.notify(4, nb3.build());

         }

 

1.1.5.6 完全自定義的通知

private void btn_no_custom() {

                   RemoteViews views = new RemoteViews(getPackageName(),R.layout.remote);

                   NotificationCompat.Buildernb4 = newNotificationCompat.Builder(this)

                   .setSmallIcon(R.drawable.ic_launcher)

                  .setContent(views);

                   views.setImageViewResource(R.id.iv_re, R.drawable.th_28adb914);

                   views.setTextViewText(R.id.tv_re, "文字文字");

                   /**

                    * 2.請求碼

                    * 3、意圖Intent要執行的跳轉動作

                    * 4int標識,用於設置PendingIntent對象創建的特點

                    * 5bundle對象,是否攜帶數據,可不寫

                    */

                   PendingIntentpendingIntent = PendingIntent.getActivity(this,

                                     1,

                                     new Intent(MainActivity.this, TwoActivity.class),

                                     PendingIntent.FLAG_UPDATE_CURRENT);

                   //設置RemoveView的點擊事件

                   //當前設置代表點擊idR.id.but_re的按鈕時,要執行跳轉到TwoActivity頁面的操作

                   views.setOnClickPendingIntent(R.id.but_re, pendingIntent);

                  

                   manager.notify(5, nb4.build());

         }

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