第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開發(fā)者教程

Android 入門教程

菜單類控件
菜單:Menu
并發(fā)編程
多線程
首頁 慕課教程 Android 入門教程 Android 入門教程 狀態(tài)欄通知:Notification

狀態(tài)欄通知:Notification

Notification 是一種可以在 App 之外給用戶彈出消息通知的控件,當(dāng)我們告訴系統(tǒng)有一個消息需要通知用戶的時候,系統(tǒng)首先會在通知欄展示一個 icon,然后通過下拉通知欄我們可以查看詳細的通知內(nèi)容。非常適合于在推送新聞、好友消息、廣告等場景使用,目前幾乎所有的 App 都有這種類型的通知,大家平時在使用 Android 系統(tǒng)的時候一定會經(jīng)常遇到,今天我們就一起來學(xué)習(xí)這種通知方式的用法。

1. Notification 的特性

在上一節(jié)我們學(xué)習(xí)了 Toast,它提供了一種簡單易用的展示提示信息的方法,但是它只能做短暫的提示,而相比之下,Notification 可以讓消息長時間的停留在通知欄,適合于一些內(nèi)容比較多并且需要長時間停留的消息通知。通常在頂部通知欄會有 icon 顯示,有些手機甚至?xí)渖?LED 燈的閃爍,如圖:

Notification通知欄樣式

如果想要看詳細的通知內(nèi)容,可以通過下拉的方式展開通知列表,然后點擊我們想要看的通知欄目即可,如圖:
下拉通知列表

2. Notification 的基本使用

我們可以直接創(chuàng)建 Notification,但是這樣不利于我們設(shè)置自己的樣式,好在 Android 系統(tǒng)為 Notification 提供了一個構(gòu)建者,我們可以通過 Builder 來自定義各種屬性,Builder 常用 API 如下:

  • setAutoCancel(boolean autoCancel):
  • 設(shè)置當(dāng)用戶點擊通知之后,通知是否要自動消失。
  • setContent(RemoteViews views) :
    設(shè)置一個自定義的 View 來替換系統(tǒng)標(biāo)準(zhǔn)的 View,從而實現(xiàn)自定義通知樣式。
  • setContentInfo(CharSequence info):
    設(shè)置通知的大文本內(nèi)容(通常位于通知的右邊)。
  • setContentIntent(PendingIntent intent):
    設(shè)置一個PendingIntent供Notification被點擊的時候使用。
  • setContentText(CharSequence text):
    設(shè)置通知的內(nèi)容文本。
  • setContentTitle(CharSequence title):
    設(shè)置通知的標(biāo)題文本。
  • setDefaults(int defaults):
    設(shè)置Notification的默認選項。
  • setSmallIcon(int icon):
    設(shè)置通知的小 icon(通常位于右下角)。
  • setLargeIcon(Bitmap bitmap):
    設(shè)置通知的大 icon(通常位于左邊)。
  • setTicker(CharSequence ticker):
    設(shè)置收到通知時在系統(tǒng)頂部顯示的提示內(nèi)容。
  • setWhen(long when):
    設(shè)置通知的時間,通知列表會按照這個值進行排序。
  • setVibrate(long[] pattern):
    設(shè)置收到通知時的振動頻率。
  • setLights(int argb, int onMs, int offMs):
    設(shè)置 LED 燈樣式(需要設(shè)備支持且設(shè)置 Flag 為Notification.FLAG_SHOW_LIGHTS),方法參數(shù)依次是:燈光顏色, 亮的時長,滅的時長。
  • setSound(Uri uri):
    設(shè)置接收到通知時的鈴聲。
  • setOngoing(boolean ongoing):
    設(shè)置當(dāng)前是否正在進行一個通知。

3. Notification 使用示例

3.1 Notification 的創(chuàng)建與展示

Android 系統(tǒng)為我們提供了一套非常簡單的方法去創(chuàng)建 Notification,只需要按照以下步驟即可輕松使用:
Step 1: 創(chuàng)建 Notification Builder
創(chuàng)建 Notification 之前我們要構(gòu)建一個 Notification Builder,關(guān)于 Builder 我們在前文中提到過,通過它我們可以設(shè)置 Notification 各種各樣的屬性,比如大小圖標(biāo)、標(biāo)題、內(nèi)容、優(yōu)先級等等,創(chuàng)建 Builder 的方式很簡單,通過以下代碼即可完成創(chuàng)建:

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this)

Step 2: 設(shè)置 Notification 屬性
一旦創(chuàng)建了 Builder,我們就可以通過它設(shè)置 Notification 的屬性從而實現(xiàn)我們的需求了。從第 2 小節(jié)中我們了解到 Builder 的 API 非常之多,其實大多數(shù) API 是很少用的,我們只需要了解就好,而以下 3 個是系統(tǒng)強制要求設(shè)置的:

  • 設(shè)置小圖標(biāo)
    mBuilder.setSmallIcon(R.drawable.notification_icon);
    
  • 設(shè)置通知標(biāo)題
    mBuilder.setContentTitle("Notification Alert, Click Me!");
    
  • 設(shè)置通知內(nèi)容
    mBuilder.setContentText("Hi, This is Android Notification Detail!");
    

Step 3: 綁定事件
這一步是一個可選項,如果你有一些復(fù)雜的邏輯需要執(zhí)行,那么可以給 Notification 綁定一個事件,讓用戶在點擊通知欄的時候能夠跳轉(zhuǎn)到對應(yīng)的 Activity 中完成相應(yīng)的操作。
我們通過一個 PendingIntent 來完成綁定,PendingIntent 中包含一個可以啟動 Activity 的 Intent。然后使用setContentIntent(PendingIntent intent)接口將 PendingIntent 和通知關(guān)聯(lián)上,這樣在通知列表中點擊相應(yīng)的通知就可以跳轉(zhuǎn)到對應(yīng)的 Activity 當(dāng)中了,使用方法如下:

Intent intent = new Intent(context, Destination.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
Notification.Builder builder = new Notification.Builder(this);
mBuilder.setContentIntent(pendingIntent);     

Step 4: 展示通知
最后,我們可以通過設(shè)置好的 Builder 構(gòu)造出我們想要的 Notification,然后調(diào)用NotificationManager.notify()通知系統(tǒng)展示通知,示例代碼如下:

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(notificationID, builder.build());

其中 notificationID 是當(dāng)前通知的唯一 ID,后續(xù)可以它來更新Notification。

3.2 Notification 完整示例

如果你安裝了慕課網(wǎng) App,那么一定收到過一些精彩課程的推送信息,接下來我們就一起通過 Notification 完成一個新課程的更新通知。

3.2.1 編寫布局

首先提供一個 Button 用于觸發(fā)新課程的推送,然后一個 Button 用于取消這條推送,為了樣式的美觀,我們在加上一條App的標(biāo)題和內(nèi)容信息。整個的布局比較簡單,主要由 4 個元素組成,代碼如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:paddingBottom="@dimen/activity_vertical_margin"
   android:paddingLeft="@dimen/activity_horizontal_margin"
   android:paddingRight="@dimen/activity_horizontal_margin"
   android:paddingTop="@dimen/activity_vertical_margin"
   tools:context="MainActivity">
   
   <TextView
      android:id="@+id/tv_title"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Android Study"
      android:layout_alignParentTop="true"
      android:layout_centerHorizontal="true"
      android:textSize="30dp" />
      
   <TextView
      android:id="@+id/tv_content"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="慕課網(wǎng)新課程通知"
      android:textColor="#ff87ff09"
      android:textSize="30dp"
      android:layout_below="@+id/tv_title"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="48dp" />
      
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="取消課程通知"
      android:id="@+id/bt_cancel"
      android:layout_marginTop="62dp"
      android:layout_below="@+id/bt_show"
      android:layout_centerHorizontal="true" />
   <Button
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:id="@+id/bt_show"
      android:text="彈出課程通知"
      android:layout_below="@+id/tv_content"
      android:layout_centerHorizontal="true"
      android:layout_marginTop="42dp" />
</RelativeLayout>

樣式效果如下:
新課程通知

3.2.2 編寫 MainActivity 邏輯

MainActivity 里面要做的事也比較簡單,大體上只有兩件事:

  1. 在點擊“彈出課程通知”的時候創(chuàng)建 Builder 并通過設(shè)置相應(yīng)的屬性及提示信息,接著構(gòu)造 Notification 并展示;
  2. 點擊“取消課程通知”,則隱藏掉已經(jīng)彈出的課程通知。

代碼如下:

package com.emercy.myapplication;

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.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {
   NotificationManager mManager;
   
   private static final int NOTIFICATION_ID = 0;
   
   @Override
   protected void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);

      ((Button)findViewById(R.id.bt_show)).setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
            addNotification();
         }
      });
      ((Button) findViewById(R.id.bt_cancel)).setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View v) {
        	  if (mManager != null) {
        		  mManager.cancel(NOTIFICATION_ID);
        	  }
          }
       });
   }

   private void addNotification() {
      Notification.Builder builder = new Notification.Builder(this)
         .setSmallIcon(R.drawable.icon)
         .setContentTitle("慕課網(wǎng) Android 教程更新")
         .setContentText("狀態(tài)欄通知:Notification");
      
      Intent notificationIntent = new Intent(this, NotificationActivity.class);
      PendingIntent contentIntent = PendingIntent.getActivity(this, 0, notificationIntent, PendingIntent.FLAG_UPDATE_CURRENT);
      builder.setContentIntent(contentIntent);

      mManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
      mManager.notify(NOTIFICATION_ID, builder.build());
   }
}

彈出的通知樣式如下:

Notification列表樣式

注意: 在代碼中我們?yōu)?Notification 設(shè)置了 PendingIntent,而 PendingIntent 是通過一個 Intent 構(gòu)造出來的,通過這個 Intent 我們可以將 Notification 和 NotificationActivity 綁定上,從而實現(xiàn)點擊 Notification 跳轉(zhuǎn)到相應(yīng) Activity 的功能,頁面樣式如下:

3.2.3 編寫 NotificationActivity 及其布局頁面

當(dāng)用戶在下拉通知菜單中點擊我們彈出的 Notification 后,就可以進入推送的新課程頁面了,這里就簡單放一個TextView表示新課程的內(nèi)容:

<?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" >
   
   <TextView
      android:layout_width="match_parent"
      android:layout_height="400dp"
      android:text="想要學(xué)習(xí)更多 Android 精彩內(nèi)容,請登錄慕課網(wǎng)官方網(wǎng)站,跟著超哥學(xué) Android" />
</LinearLayout>

然后創(chuàng)建一個空白的 NotificationActivity,設(shè)置布局為以上文件:

package com.emercy.myapplication;
import android.os.Bundle;
import android.app.Activity;

public class NotificationActivity extends Activity{
   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.notification);
   }
}

在通知列表中點擊我們的 Notification 會跳轉(zhuǎn)到課程的詳情頁,也就是 NotificationActivity,如下:

NotificationActivity

4. 小結(jié)

本節(jié)介紹了一個可以長時間停留,并且樣式更豐富的通知消息,再點擊的時候能夠跳轉(zhuǎn)到指定的 Activity 執(zhí)行相應(yīng)的業(yè)務(wù)邏輯。

為了更好的對 Notification 做定制化需求,系統(tǒng)為我們提供了一個 Builder 用于設(shè)置各種屬性及樣式,在創(chuàng)建之后通過NotificationManager來彈出通知,并且可以通過PendingIntent設(shè)置點擊通知之后的跳轉(zhuǎn)頁面,只要按照正確的流程來使用,Notification 還是非常簡單易用的。