Android筆記——橫幅通知


通知分為三種:下拉通知、鎖屏通知、橫幅通知。前兩個通知內容是相同的,橫幅通知的View需要單獨定制(還有一種是只在通知欄出現一句話)

一般的app,只會默認開啟“下拉通知”的權限。其他兩個通知需要用戶手動去在設置中開啟。只有系統級apk(如通話、短信)或者高頻使用的apk(如微信、QQ)會三個權限都開啟。【注:因為本人只用過華為的手機,其他ROM廠商和Google的規則不是很清楚】。一般來說在下拉通知和鎖屏通知顯示的內容是一樣的,只是普通的apk需要用戶在設置中單獨開啟權限才能看到鎖屏/橫幅通知。鎖屏/橫幅通知是Android5.0才引入的。感興趣的可以百度自己搜索一下效果。這里博主隨便找了一個:http://www.360doc.com/content/15/0205/15/21857071_446464870.shtml。

鎖屏通知不需要單獨的繪制,內容和正常的下拉通知一樣;橫幅通知的View必須要單獨繪制,出於美觀,一般也不會與下拉/鎖屏設置的相同。下面就來簡單講解一下通知(Notification)的用法。

1. 首先我們需要一個獲取通知管理器(NotificationManager):

 1 import android.app.Notification;
 2 import android.app.NotificationManager;
 3 
 4 public class MainActivity extends AppCompatActivity {
 5     private NotificationManager notificationManager;
 6 
 7     @Override
 8     protected void onCreate(Bundle savedInstanceState) {
 9         super.onCreate(savedInstanceState);
10         notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
11     }

2. 然后我們需要通過Notification.Builder創建一個通知並顯示:

 1     private void sendNotification() {
 2         Notification.Builder nb = new Notification.Builder(this);
 3         PendingIntent pendingIntent = PendingIntent.getActivity(this, 0,
 4                 new Intent(this, MainActivity.class), 0);   // 設置一個不是馬上調用的PendingIntent,和Intent類似
 5         nb.setSmallIcon(R.mipmap.ic_launcher)               // 設置狀態欄里的小圖標
 6         .setWhen(System.currentTimeMillis())                // 設置時間發生時間
 7         .setAutoCancel(true)                                // 設置可以清除
 8         .setContentTitle("This is ContentTitle")            // 設置下拉列表里的標題
 9         .setContentText("this is ContentText")              // 設置下拉列表里的說明
10         .setTicker("這個通知只有一句話,在通知欄上")             // 設置一句話通知
11         .setContentIntent(pendingIntent)                    // 點擊通知則執行pendingIntent,跳轉到MainActivity
12         .setContent(getRemoteViews2());                     // 設置下拉通知欄(會讓標題、說明、圖標無效)
13         Notification n = nb.build();                        // 獲取一個Notification
14         n.defaults = Notification.DEFAULT_SOUND;            // 設置為默認的聲音
15         n.headsUpContentView = getRemoteViews();            // 設置橫幅通知
16         notificationManager.notify(NOTIFICATION_ID, n);     // 顯示通知
17     }

第10行的setTicker()其實就是上面的提到過的一句話通知,相當於橫幅通知的“簡略版”;

第11行的setContentIntent()是設置點擊通知跳轉到MainActivity,由於不是馬上執行,所以使用的是PendingIntent;

第12行的setContent()是使用定制的通知界面,而不是現有的框架,這條語句會讓之前設置的標題、說明、圖標無效,以這個為准;

第15行的headsUpContentView就是橫幅通知了,它和setContent()的參數的類型一樣,都是RemoteViews。

 1     private RemoteViews getRemoteViews() {
 2         RemoteViews views = new RemoteViews(getApplicationContext().getPackageName(), R.layout.headupview);
 3         // 這里可以設置按鈕監聽,待補充
 4         return views;
 5     }
 6 
 7     private RemoteViews getRemoteViews2() {
 8         RemoteViews views = new RemoteViews(getApplicationContext().getPackageName(), R.layout.notificationview);
 9         // 這里可以設置按鈕監聽,待補充
10         return views;
11     }

3. 布局實現(headupview)

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="64dp"
                android:layout_marginStart="12dp"
                android:layout_marginTop="12dp" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView"
        android:src="@mipmap/icon" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="啦啦啦,我是標題(∩_∩)"
        android:textSize="12sp"
        android:id="@+id/textView"
        android:layout_alignParentTop="true"
        android:layout_marginStart="10dp"
        android:layout_marginTop="11dp"
        android:layout_toEndOf="@+id/imageView"/>

    <Button
        android:layout_width="132dp"
        android:layout_height="33dp"
        android:text="取消"
        android:id="@+id/button3"
        android:textSize="12sp"
        android:layout_below="@id/textView"
        android:layout_toEndOf="@id/imageView"
        android:layout_marginStart="10dp"
        android:layout_gravity="center_vertical"/>

    <Button
        android:layout_width="132dp"
        android:layout_height="33dp"
        android:text="同意"
        android:id="@+id/button4"
        android:layout_below="@id/textView"
        android:layout_marginStart="9dp"
        android:layout_toEndOf="@id/button3"
        android:textSize="12sp"/>

</RelativeLayout>

布局實現(notificationview):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="64dp"
                android:layout_marginStart="2dp"
                android:layout_marginTop="1dp" >

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView"
        android:src="@mipmap/icon" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="啦啦啦,我是標題(∩_∩)"
        android:textSize="12sp"
        android:id="@+id/textView"
        android:layout_alignParentTop="true"
        android:layout_marginStart="10dp"
        android:layout_marginTop="11dp"
        android:layout_toEndOf="@+id/imageView"/>

    <Button
        android:layout_width="112dp"
        android:layout_height="33dp"
        android:text="取消"
        android:id="@+id/button3"
        android:textSize="12sp"
        android:layout_below="@id/textView"
        android:layout_toEndOf="@id/imageView"
        android:layout_marginStart="10dp"
        android:layout_gravity="center_vertical"/>

    <Button
        android:layout_width="112dp"
        android:layout_height="33dp"
        android:text="同意"
        android:id="@+id/button4"
        android:layout_below="@id/textView"
        android:layout_marginStart="9dp"
        android:layout_toEndOf="@id/button3"
        android:textSize="12sp"/>

</RelativeLayout>

很多知識點沒有補全,未完待續……

推薦閱讀以下這個,超級全:

http://blog.csdn.net/loongggdroid/article/details/17616509/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM