亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

android notification 的總結分析

2020-04-11 12:26:16
字體:
來源:轉載
供稿:網友

分類

 notification有以下幾種:

  1>普通notification

  

    1.內容標題

    2.大圖標

    3.內容

    4.內容附加信息

    5.小圖標

    6.時間

  2>大布局Notification

    圖1

  大布局notification是在android4.1以后才增加的,大布局notification與小布局notification只在‘7'部分有區別,其它部分都一致。大布局notification只有在所有notification的最上  面時才會顯示大布局,其它情況下顯示小布局。你也可以用手指將其擴展為大布局(前提是它是大布局)。如下圖:

  圖2

    大布局notification有三種類型:如圖1為NotificationCompat.InboxStyle 類型。圖2左部為NotificationCompat.BigTextStyle。圖2右部 為:NotificationCompat.BigPictureStyle

   3>自定義布局notification

     除了系統提供的notification,我們也可以自定義notification。如下圖所示的一個音樂播放器控制notification:

    圖3

如何創建notification


    1>實例化一個NotificationCompat.Builder對象;如builder

     2>調用builder的相關方法對notification進行上面提到的各種設置

    3>調用builder.build()方法此方法返回一個notification對象。

     4>實例化一個NotificationManager對象;如:manager

     5>調用manager的notify方法。

  注:

   一個notification不必對上面所有的選項都進行設置,但有3項是必須的:

   小圖標, set by setSmallIcon()

     內容標題, set by setContentTitle()

     內容, set by setContentText()

示例代碼



示例程序截圖:

 

0>初始化部分代碼

復制代碼 代碼如下:

View Code
 public class MainActivity extends Activity implements OnClickListener {

     private static final int NOTIFICATION_ID_1 = 0;
     private static final int NOTIFICATION_ID_2 = 1;
     private static final int NOTIFICATION_ID_3 = 2;
     private static final int NOTIFICATION_ID_4 = 3;
     private static final int NOTIFICATION_ID_5 = 4;
     private static final int NOTIFICATION_ID_6 = 5;
     private static final int NOTIFICATION_ID_7 = 6;
     private static final int NOTIFICATION_ID_8 = 7;

     private static int messageNum = 0;
     private Context context = this;
     private NotificationManager manager;
     private Bitmap icon;
     private static final int[] btns = new int[] { R.id.btn1, R.id.btn2,
             R.id.btn3, R.id.btn4, R.id.btn5, R.id.btn6, R.id.btn7, R.id.btn8,
             R.id.btn9 };

     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
         init();
     }

     private void init() {
         // 獲取通知服務
         manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
         // 注冊監聽器
         for (int btn : btns) {
             findViewById(btn).setOnClickListener(this);
         }

         icon = BitmapFactory.decodeResource(getResources(),
                 R.drawable.ic_launcher);
     }

     @Override
     public void onClick(View v) {
         switch (v.getId()) {
         case R.id.btn1:
             showNormal();
             break;
         case R.id.btn2:
             showBigView_Text();
             break;
         case R.id.btn3:
             showBigView_Pic();
             break;
         case R.id.btn4:
             showBigView_Inbox();
             break;
         case R.id.btn5:
             showCustomView();
             break;
         case R.id.btn6:
             backApp();
             break;
         case R.id.btn7:
             backScreen();
             break;
         case R.id.btn8:
             showProgressBar();
             break;
         case R.id.btn9:
             dismiss();
             break;
         default:
             Toast.makeText(context, "error", Toast.LENGTH_SHORT).show();
             break;
         }
     }

     private void dismiss() {
         manager.cancelAll();
     }

1>普通notification
復制代碼 代碼如下:

View Code
     private void showNormal() {

         Notification notification = new NotificationCompat.Builder(context)
                 .setLargeIcon(icon).setSmallIcon(R.drawable.ic_launcher)
                 .setTicker("showNormal").setContentInfo("contentInfo")
                 .setContentTitle("ContentTitle").setContentText("ContentText")
                 .setNumber(++messageNum)
                 .setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL)
                 .build();
         manager.notify(NOTIFICATION_ID_1, notification);
     }

2>大布局Text類型notification
復制代碼 代碼如下:

View Code
 private void showBigView_Text() {
         NotificationCompat.BigTextStyle textStyle = new BigTextStyle();
         textStyle
                 .setBigContentTitle("BigContentTitle")
                 .setSummaryText("SummaryText")
                 .bigText(
                         "I am Big Texttttttttttttttttttttttttttttttttttttttttttt!!!!!!!!!!!!!!!!!!!......");
         Notification notification = new NotificationCompat.Builder(context)
                 .setLargeIcon(icon).setSmallIcon(R.drawable.ic_launcher)
                 .setTicker("showBigView_Text").setContentInfo("contentInfo")
                 .setContentTitle("ContentTitle").setContentText("ContentText")
                 .setStyle(textStyle)
                 .setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL)
                 .build();
         manager.notify(NOTIFICATION_ID_2, notification);
     }

3> 大布局Picture類型notificatio
復制代碼 代碼如下:

View Code
 private void showBigView_Pic() {
         NotificationCompat.BigPictureStyle pictureStyle = new BigPictureStyle();
         pictureStyle.setBigContentTitle("BigContentTitle")
                 .setSummaryText("SummaryText").bigPicture(icon);
         Notification notification = new NotificationCompat.Builder(context)
                 .setLargeIcon(icon).setSmallIcon(R.drawable.ic_launcher)
                 .setTicker("showBigView_Pic").setContentInfo("contentInfo")
                 .setContentTitle("ContentTitle").setContentText("ContentText")
                 .setStyle(pictureStyle)
                 .setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL)
                 .build();
         manager.notify(NOTIFICATION_ID_3, notification);
     }

4>大布局Inbox類型notification
復制代碼 代碼如下:

View Code
 private void showBigView_Inbox() {
         NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
         inboxStyle.setBigContentTitle("BigContentTitle").setSummaryText(
                 "SummaryText");
         for (int i = 0; i < 5; i++)
             inboxStyle.addLine("news:" + i);
         Notification notification = new NotificationCompat.Builder(context)
                 .setLargeIcon(icon).setSmallIcon(R.drawable.ic_launcher)
                 .setTicker("showBigView_Inbox").setContentInfo("contentInfo")
                 .setContentTitle("ContentTitle").setContentText("ContentText")
                 .setStyle(inboxStyle)
                 .setAutoCancel(true).setDefaults(Notification.DEFAULT_ALL)
                 .build();
         manager.notify(NOTIFICATION_ID_4, notification);
     }

5>自定義notification
效果圖:



并對中間的播放按鈕做了一個簡單的點擊處理事件(點擊播放后,請關閉幕簾否則可能會看不到toast提示)

復制代碼 代碼如下:

View Code
 private void showCustomView() {
         RemoteViews remoteViews = new RemoteViews(getPackageName(),
                 R.layout.custom_notification);
         Intent intent = new Intent(this, TestMusicControl.class);
         PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0,
                 intent, 0);
         remoteViews.setOnClickPendingIntent(R.id.paly_pause_music,
                 pendingIntent);
         NotificationCompat.Builder builder = new Builder(context);
         builder.setContent(remoteViews).setSmallIcon(R.drawable.music_icon)
                 .setLargeIcon(icon).setOngoing(true)
                 .setTicker("music is playing");
         manager.notify(NOTIFICATION_ID_8, builder.build());
     }

布局文件:
復制代碼 代碼如下:

View Code
 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     android:gravity="center_vertical"
     android:orientation="horizontal" >

     <ImageView
         android:id="@+id/songer_pic"
         android:layout_width="64dp"
         android:layout_height="64dp"
         android:src="@drawable/yan" />

     <LinearLayout
         android:layout_width="fill_parent"
         android:layout_height="fill_parent"
         android:gravity="center_vertical"
         android:orientation="horizontal" >

         <ImageView
             android:id="@+id/last_music"
             android:layout_width="0dp"
             android:layout_height="48dp"
             android:layout_weight="1"
             android:src="@drawable/music_previous" />

         <ImageView
             android:id="@+id/paly_pause_music"
             android:layout_width="0dp"
             android:layout_height="48dp"
             android:layout_weight="1"
             android:src="@drawable/music_play" />

         <ImageView
             android:id="@+id/next_music"
             android:layout_width="0dp"
             android:layout_height="48dp"
             android:layout_weight="1"
             android:src="@drawable/music_next" />
     </LinearLayout>

 </LinearLayout>

帶進度條的notification
復制代碼 代碼如下:

View Code
     private void showProgressBar() {

         final NotificationCompat.Builder builder = new NotificationCompat.Builder(
                 context);
         builder.setLargeIcon(icon).setSmallIcon(R.drawable.ic_launcher)
                 .setTicker("showProgressBar").setContentInfo("contentInfo")
                 .setOngoing(true).setContentTitle("ContentTitle")
                 .setContentText("ContentText");
         new Thread(new Runnable() {

             @Override
             public void run() {

                 int progress = 0;

                 for (progress = 0; progress < 100; progress += 5) {
                     //將setProgress的第三個參數設為true即可顯示為無明確進度的進度條樣式
                     builder.setProgress(100, progress, false);
                     manager.notify(NOTIFICATION_ID_7, builder.build());
                     try {
                         // Sleep for 5 seconds
                         Thread.sleep(2 * 1000);
                     } catch (InterruptedException e) {
                         System.out.println("sleep failure");
                     }
                 }
                 builder.setContentTitle("Download complete")
                         .setProgress(0, 0, false).setOngoing(false);
                 manager.notify(NOTIFICATION_ID_7, builder.build());

             }
         }).start();
     }

點擊事件處理

--------------------------------------------------------------------------------
  有時候我們可能需要實現這樣的功能:當新notification出現時,我們希望點擊它后可直接進入應用相應的界面中去完整查看或處理此消息的功能。然后,當我們點擊back按鈕時返回到應用主界面而不是桌面。比如:當我們有新的短信來時,我們在任務欄中點擊它后進入讀信息頁面,當我們讀完短信后,按“返回”鍵回到短信的主界面,而不是手機桌面。要實現這樣的功能要我們做相應的處理:

1>返回應用主界面

復制代碼 代碼如下:

View Code
     private void backApp() {

         TaskStackBuilder stackBuilder = TaskStackBuilder.create(this);
         // Adds the back stack
         stackBuilder.addParentStack(OtherActivity.class);
         // Adds the Intent to the top of the stack
         Intent resultIntent = new Intent(this, OtherActivity.class);
         stackBuilder.addNextIntent(resultIntent);
         // Gets a PendingIntent containing the entire back stack
         PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0,
                 PendingIntent.FLAG_UPDATE_CURRENT);

         Notification notification = new NotificationCompat.Builder(context)
                 .setLargeIcon(icon).setSmallIcon(R.drawable.ic_launcher)
                 .setTicker("backApp").setContentInfo("contentInfo")
                 .setContentTitle("ContentTitle").setContentText("ContentText")
                 .setContentIntent(resultPendingIntent).setAutoCancel(true)
                 .setDefaults(Notification.DEFAULT_ALL).build();
         manager.notify(NOTIFICATION_ID_5, notification);
         this.finish();
     }

并需要我們在配置文件中對我們用來顯示詳細信息的OtherActivity進行相應的配置如下:
復制代碼 代碼如下:

<activity
             android:name="com.example.notification.OtherActivity"
             android:label="@string/title_activity_other"
             android:parentActivityName=".MainActivity" >
             <meta-data
                 android:name="android.support.PARENT_ACTIVITY"
                 android:value=".MainActivity" />
         </activity>

2>直接返回桌面

   有些時候我們可能需要實現這樣的功能:當我們點擊notification時彈出一個稍大點的窗口來顯示整個消息,這窗口的作用就是用來顯示整個消息內容的,和此應用內的其它Activity都沒有關系,然后當我們點擊"back"后直接返回到手機桌面。要實現這樣的功能我們只需要調用builder的.setContentIntent方法,然后對所要跳轉到的activity在配置文件中進行一些配置:

復制代碼 代碼如下:

View Code
 private void backScreen() {
         Intent notifyIntent = new Intent(this, SpecialActivity.class);
         // Sets the Activity to start in a new, empty task
         notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
                 | Intent.FLAG_ACTIVITY_CLEAR_TASK);
         // Creates the PendingIntent
         PendingIntent notify_Intent = PendingIntent.getActivity(this, 0,
                 notifyIntent, PendingIntent.FLAG_UPDATE_CURRENT);

         Notification notification = new NotificationCompat.Builder(context)
                 .setLargeIcon(icon).setSmallIcon(R.drawable.ic_launcher)
                 .setTicker("backScreen").setContentInfo("contentInfo")
                 .setContentTitle("ContentTitle").setContentText("ContentText")
                 .setContentIntent(notify_Intent).setAutoCancel(true)
                 .setDefaults(Notification.DEFAULT_ALL).build();
         manager.notify(NOTIFICATION_ID_6, notification);
         this.finish();
     }

配置文件:
復制代碼 代碼如下:

 <activity
             android:name="com.example.notification.SpecialActivity"
             android:excludeFromRecents="true"
             android:label="@string/title_activity_special"
             android:launchMode="singleTask"
             android:taskAffinity="" >

源碼下載

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品99久久99久久久二8| 欧美一级免费看| 国产精品成人av在线| 7777精品久久久久久| 日本精品性网站在线观看| 国产在线观看一区二区三区| 在线国产精品视频| 精品久久香蕉国产线看观看亚洲| 久久久免费观看视频| 69久久夜色精品国产69乱青草| 欧美激情免费视频| 亚洲欧美一区二区三区情侣bbw| 欧美另类99xxxxx| 91精品视频在线看| 色噜噜狠狠狠综合曰曰曰88av| 一色桃子一区二区| 亚洲天堂视频在线观看| 中文字幕日韩电影| 国产91精品网站| 日韩精品视频观看| 国产日韩在线播放| 欧美一级大片在线免费观看| 亚洲欧美在线一区| 亚洲电影天堂av| 亚洲国产精品久久久久秋霞蜜臀| 国产精品va在线| 亚洲视频在线免费看| 欧美高清视频在线| 色综合色综合网色综合| 中文字幕亚洲欧美日韩在线不卡| 欧美黄色三级网站| 久久免费视频网站| 欧美重口另类videos人妖| 岛国av在线不卡| 亚洲а∨天堂久久精品9966| 成人欧美一区二区三区黑人| 国产在线98福利播放视频| 亚洲精品视频在线播放| 麻豆乱码国产一区二区三区| 国产成人免费av电影| 久久噜噜噜精品国产亚洲综合| 人人做人人澡人人爽欧美| 欧美激情视频网| 岛国精品视频在线播放| 91亚洲精品久久久久久久久久久久| 亚洲欧洲一区二区三区久久| 亚洲国产成人精品久久久国产成人一区| 97久久超碰福利国产精品…| 自拍偷拍免费精品| 亚洲精品久久久久国产| 亚洲精品欧美日韩专区| 中文精品99久久国产香蕉| 久久久久久久久久国产| 亚洲激情 国产| 91亚洲va在线va天堂va国| 亚洲va欧美va国产综合久久| 中日韩美女免费视频网址在线观看| 最新国产成人av网站网址麻豆| 日韩在线精品一区| 精品久久国产精品| 久久影视电视剧免费网站| 国产精品日韩欧美| 在线观看日韩www视频免费| 66m—66摸成人免费视频| 国产亚洲精品久久久久久牛牛| 亚洲成人精品视频| 亚洲18私人小影院| 久久人人爽人人爽人人片av高清| 欧美三级免费观看| 久热在线中文字幕色999舞| 91欧美精品成人综合在线观看| 亚洲精品一区二区久| 国产视频观看一区| 中文字幕av一区二区三区谷原希美| 国产女同一区二区| 欧美日韩爱爱视频| 国产一区二区三区在线观看视频| 色综合天天狠天天透天天伊人| 亚洲国产日韩一区| 欧美日韩中文字幕综合视频| 日韩欧美在线看| 国模私拍视频一区| 亚洲第一综合天堂另类专| 超碰日本道色综合久久综合| 日韩精品视频三区| 亚洲国产成人精品女人久久久| 国产网站欧美日韩免费精品在线观看| 欧美尤物巨大精品爽| 97精品国产91久久久久久| 2020国产精品视频| 中文字幕成人精品久久不卡| 日韩高清电影免费观看完整| 欧美黄色片视频| 亚洲嫩模很污视频| 国产午夜精品全部视频播放| 精品亚洲va在线va天堂资源站| 亚洲片在线资源| 国产精品r级在线| 亚洲精品久久久久| 92福利视频午夜1000合集在线观看| 亚洲欧美另类在线观看| 亚洲高清免费观看高清完整版| 国产欧美日韩亚洲精品| 久久精品国亚洲| 色偷偷综合社区| 日本不卡视频在线播放| 91高清视频免费观看| 欧美日韩成人黄色| 不卡在线观看电视剧完整版| 日韩av电影在线免费播放| 免费91在线视频| 久久久国产一区| 国产精品久久99久久| 久久中文字幕在线视频| 成人激情春色网| 久久在线免费视频| 国产精品美女免费看| 成人黄色av免费在线观看| 亚洲欧美日韩视频一区| 久久亚洲国产精品成人av秋霞| 日韩欧亚中文在线| 日韩精品视频在线| 伊人激情综合网| 亚洲综合成人婷婷小说| 欧美激情精品在线| 欧美国产第一页| 欧美伦理91i| 久久影院模特热| 亚洲人成在线电影| 中文字幕亚洲无线码在线一区| 久久久999国产| 久久手机精品视频| 欧美国产精品日韩| 操日韩av在线电影| 欧美三级xxx| 国产精品福利观看| 久久久久久一区二区三区| 色悠久久久久综合先锋影音下载| 色妞一区二区三区| 91禁外国网站| 亚洲va久久久噜噜噜久久天堂| 久久精品国产精品亚洲| 97在线免费观看| 91欧美视频网站| 国产精品69精品一区二区三区| 国产日韩中文在线| 日韩69视频在线观看| 日本国产一区二区三区| 国产精品视频资源| 精品久久久久久| 国产一区二区三区免费视频| 91中文字幕在线| 亚洲精品xxxx| 亚洲深夜福利网站| 日韩av手机在线| 久久手机精品视频| 亚洲人成网站色ww在线| 中文字幕国产精品| 亚洲精品在线91| 久久亚洲电影天堂| 国产一区二区视频在线观看| 成人伊人精品色xxxx视频| 国产亚洲一区二区精品| 国产精品va在线播放|