Android中使用Notification實現普通通知欄(Notification示例一)

来源:http://www.cnblogs.com/panhouye/archive/2016/12/06/6139386.html
-Advertisement-
Play Games

Notification是在你的應用常規界面之外展示的消息。當app讓系統發送一個消息的時候,消息首先以圖表的形式顯示在通知欄。要查看消息的詳情需要進入通知抽屜(notificationdrawer)中查看。(notificationdrawer)都是系統層面控制的,你可以隨時查看,不限制於app。 ...


Notification是在你的應用常規界面之外展示的消息。當app讓系統發送一個消息的時候,消息首先以圖表的形式顯示在通知欄。要查看消息的詳情需要進入通知抽屜(notificationdrawer)中查看。(notificationdrawer)都是系統層面控制的,你可以隨時查看,不限制於app。

Notification的設計:

作為android UI中很重要的組成部分,notification擁有專屬於自己的設計準則。

Notification的界面元素在通知抽屜中的notification有兩種顯示方式,取決於你的android版本以及notificationdrawer的狀態。

Notification的兩種顯示方式:

(1)普通視圖

這種風格是notification drawer的標準顯示方式。

(2)寬視圖

指你的notification被展開的時候會顯示更大的視圖,這種風格是android4.1之後才有的新特性。

下麵我們詳細介紹普通視圖的實現:

在圖通視圖中,notification最高64dp,即使你創建了一個寬視圖風格的notification,在未展開的情況下也是以普通大小顯示出來。下麵是一個普通的notification。

藍色指示框所代表的的意思如下:

1.標題

2.大圖標

3.通知內容

4.通知數據

5.小圖標

6.Notification的發佈時間。

可以通過調用setWhen()設置一個明確的時間,

預設是系統收到該notification的時間。

下麵我們是我們本次的演示效果:

本次在普通視圖的基礎上添加了點擊頁面跳轉的效果,可以理解為添加Notification的動作與行為:

雖然這也是可選的,但是你還是應該為你的notification至少添加一種行為:允許用戶通過點擊notification進入一個activity中進行更多的查看或者後續操作。一個notification可以提供多種動作,而且你也應該讓用戶點擊一個notification之後能總是有相應的響應動作,通常是打開一個activity。你還可以在notification中添加能響應點擊事件的button,比如延遲一下鬧鐘,或者立即回覆一條短消息。

在notification內部,一個動作本身是被定義在一個PendingIntent中,PendingIntent包含了一個用於啟動你app中activity的intent。要將PendingIntent和一個手勢聯繫起來,你需要調用合適的NotificationCompat.Builder方法。

比如你想在點擊notification文字的時候啟動activity,你需要調用NotificationCompat.Builder的setContentIntent()來添加PendingIntent。啟動一個activity是notification動作響應中最普遍的一類。

第一步:Layout中的activity_main.xml(僅設置觸發按鈕):

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout
 3     xmlns:android="http://schemas.android.com/apk/res/android"
 4     xmlns:tools="http://schemas.android.com/tools"
 5     android:id="@+id/activity_main"
 6     android:layout_width="match_parent"
 7     android:layout_height="match_parent"
 8     tools:context="com.example.administrator.day12.MainActivity">
 9     <Button
10         android:text="顯示通知"
11         android:layout_width="match_parent"
12         android:layout_height="wrap_content"
13         android:id="@+id/button"
14         android:onClick="show1" />
15 </LinearLayout>

第二步:Layout中跳轉頁面activity_content.xml(僅設置顯示文本):

 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     xmlns:tools="http://schemas.android.com/tools"
 4     android:id="@+id/activity_content"
 5     android:layout_width="match_parent"
 6     android:layout_height="match_parent"
 7     tools:context="com.example.administrator.day12.ContentActivity">
 8     <TextView
 9         android:layout_width="match_parent"
10         android:layout_height="match_parent"
11         android:gravity="center"
12         android:textSize="30sp"
13         android:text="十勝十敗" />
14 </LinearLayout>

第三步:java(主界面按鈕的點擊事件)實現代碼MainActivity.java:

 1 import android.app.Notification;
 2 import android.app.NotificationManager;
 3 import android.app.PendingIntent;
 4 import android.content.Context;
 5 import android.content.Intent;
 6 import android.graphics.BitmapFactory;
 7 import android.support.v7.app.AppCompatActivity;
 8 import android.os.Bundle;
 9 import android.support.v7.app.NotificationCompat;
10 import android.view.View;
11 import android.widget.RemoteViews;
12 public class MainActivity extends AppCompatActivity {
13     private static final int NO_1 =0x1 ;
14     @Override
15     protected void onCreate(Bundle savedInstanceState) {
16         super.onCreate(savedInstanceState);
17         setContentView(R.layout.activity_main);
18     }
19     public  void show1(View v){
20         NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
21         builder.setSmallIcon(R.mipmap.guojia);
22         builder.setContentTitle("郭嘉");
23         builder.setContentText("我們打袁紹吧");
24         //設置Notification.Default_ALL(預設啟用全部服務(呼吸燈,鈴聲等)
25         builder.setDefaults(Notification.DEFAULT_ALL);
26         //調用NotificationCompat.Builder的setContentIntent()來添加PendingIntent
27         Intent intent = new Intent(this, ContentActivity.class);
28         intent.putExtra("info", "郭嘉給你發了一個計策!");
29         PendingIntent pi = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
30         builder.setContentIntent(pi);
31         //獲取Notification
32         Notification n = builder.build();
33         //通過NotificationCompat.Builder.build()來獲得notification對象自己
34         NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
35         //然後調用NotificationManager.notify()向系統轉交
36         manager.notify(NO_1, n);
37     }
38 }

 

第四步:java(跳轉後Activity)功能代碼實現ContentActivity.java(只土司):

1 public class ContentActivity extends AppCompatActivity {
2     @Override
3     protected void onCreate(Bundle savedInstanceState) {
4         super.onCreate(savedInstanceState);
5         setContentView(R.layout.activity_content);
6         //通過獲取MainActivity中設置的putExtra獲取土司內容
7         Toast.makeText(this, getIntent().getStringExtra("info"), Toast.LENGTH_SHORT).show();
8     }
9 }

 

演示效果的代碼就這些,我們梳理下本次實現的思路:

(1)通過按鈕觸發點擊事件

(2)將notification的一些UI信息以及相關動作賦予NotificationCompat.Builder對象,然後通過NotificationCompat.Builder.build()來獲得notification對象自己;然後調用NotificationManager.notify()向系統轉交這個通知。

(3)在第二步中通過Builder的setContentIntent()來添加PendingIntent,為Notification添加行為,也就是Activity的跳轉

(4)對打開的Activity設置表現的效果。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 續上一篇文章:vue2.0 開發實踐總結之入門篇 ,如果沒有看過的可以移步看一下。 本篇文章目錄如下: 1. vue 組件的說明和使用 2. vuex在實際開發中的使用 3. 開發實踐總結 1. vue 組件的說明和使用 一個組件實質上是一個擁有預定義選項的一個 Vue 實例 在header組件內部 ...
  • 個人開發包的目錄結構 開發步驟 註冊 "npmjs" 命令行添加user 註冊成功後,在命令行執行 依次填完回車。 whoami 上面的填寫完後,命令行輸入 說明成功了。 npm publish 最後發佈至npmjs上 出現下麵類似的版本號就成功了 index.js的編寫 安裝&使用 可能遇到的問題 ...
  • 一、盒子模型(Box Model) 盒子模型也有人稱為框模型,HTML中的多數元素都會在瀏覽器中生成一個矩形的區域,每個區域包含四個組成部分,從外向內依次是:外邊距(Margin)、邊框(Border)、內邊距(Padding)和內容(Content),其實盒子模型有兩種,分別是 ie 盒子模型和標 ...
  • 第三章 DOM Scripting dom 文檔對象模型 類似的還有 bom 瀏覽器對象模型 。 要使用一個 對象首先要知道該對象存在的位置,比如 document 對象 它並不是被定義在 ECMAScript 中而是 dom 中。所以 本來你每次訪問 document就很慢。 引用: 文檔對象模型 ...
  • 瞭解移動web viewport的知識,主要是為了切圖時心中有數。本文主要圍繞一個問題:切圖時怎樣設置<meta name="viewport">相關參數?圍繞這個問題對viewport展開講解。 一、viewport【此處的viewport即layout viewport】概念 移動設備的view ...
  • var t='VARCHAR(5)' var pattern=/VARCHAR\(\d+\)/g pattern.test(t)//true test()返回false true 但是有哪位小伙伴能告訴我這個d是什麼意思嗎? 感謝感謝 ...
  • # 部署React+webpack工程的步驟ps:以Mac os系統做開發環境。因為npm現在使用灰常的慢,所以我使用淘寶境像cnpm。 1,準備工作: 先確保存已經安裝了node.js; 2,文件部署: (1),在終端中找到react-build項目的目錄,鍵入cnpm init初始化一個pack ...
  • 先貼出github地址:https://github.com/svgdotjs/svg.js(也就是原文檔的說明和文件的下載地址) 創建SVG文檔 此時已經可以運行,運行生成的html代碼如下: 也可以在生成SVG之前對該當前使用的瀏覽器進行判斷,是否支持SVG 此外關於鏈接還有N多個相關操作,可以 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...