Android中使用Notification實現進度通知欄(示例三)

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

我們在使用APP的過程中,軟體會偶爾提示我們進行版本更新,我們點擊確認更新後,會在通知欄顯示下載更新進度(已知長度的進度條)以及安裝情況(不確定進度條),這就是我們今天要實現的功能。實現效果如下: 在代碼實現功能前,我們先解釋進度條的兩種狀態: (1)顯示一個已知長度的進度條指示器(Displayi ...


我們在使用APP的過程中,軟體會偶爾提示我們進行版本更新,我們點擊確認更新後,會在通知欄顯示下載更新進度(已知長度的進度條)以及安裝情況(不確定進度條),這就是我們今天要實現的功能。實現效果如下:

在代碼實現功能前,我們先解釋進度條的兩種狀態:

(1)顯示一個已知長度的進度條指示器(Displaying a fixed-duration progress indicator)

為了能夠顯示一個確定的進度條,通過調用setProgress() setProgress(max, progress, false)給你的通知加上進度條。然後發佈通知。然後,隨著操作的進度,增加進度值,然後更新通知。在操作結束的時候,進度值應該等於最大值。通常的方式是調用setProgress()來設置最大值為100,然後去增加進度完成的百分比。你可以在操作完成的時候顯示進度條,也可以移除掉它。在這樣的情況下,記住要去更新通知的文本,顯示操作已經完成了。調用setProgress(0, 0, false)來移除進度條。

public Builder setProgress(int max, int progress, boolean indeterminate)

其中max為進度最大值,progress為當前進度,indeterminate為不確定的(設置為true,則為不確定的,反之則確定)

(2)顯示一個持續的活動指示器(Displayinga continue activity indicator)

為了能使用不確定的活動指示器,使用setProgress(0, 0, true)方法來給你的通知添加(前兩個參數被忽略了),然後發佈通知。除非去指定它的動畫效果,要不然,這個指示器的樣式都是一樣的。

在操作開始的時候發佈通知,這個動畫將一直執行,直到你修改通知,當操作完成的時候,調用setProgress(0, 0,false)來更新通知去移除活動指示器。我們總是這樣做,除非你想要讓操作完成的時候,動畫效果還在運行。

也請記住當操作完成的時候更新下通知里的文本。

知道了這兩點,我們開始實現代碼:

layout中點擊觸發按鈕的佈置:

 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     //定義notification實用的ID
14     private static final int NO_3 =0x3;
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.activity_main);
19     }
20     public  void show3(View v){
21         final NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
22         builder.setSmallIcon(R.mipmap.huangyueying);
23         builder.setContentTitle("下載");
24         builder.setContentText("正在下載");
25         final NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
26         manager.notify(NO_3, builder.build());
27         builder.setProgress(100,0,false);
28         //下載以及安裝線程模擬
29         new Thread(new Runnable() {
30             @Override
31             public void run() {
32                 for(int i=0;i<100;i++){
33                     builder.setProgress(100,i,false);
34                     manager.notify(NO_3,builder.build());
35                     //下載進度提示
36                     builder.setContentText("下載"+i+"%");
37                     try {
38                         Thread.sleep(50);//演示休眠50毫秒
39                     } catch (InterruptedException e) {
40                         e.printStackTrace();
41                     }
42                 }
43                 //下載完成後更改標題以及提示信息
44                 builder.setContentTitle("開始安裝");
45                 builder.setContentText("安裝中...");
46                 //設置進度為不確定,用於模擬安裝
47                 builder.setProgress(0,0,true);
48                 manager.notify(NO_3,builder.build());
49 //                manager.cancel(NO_3);//設置關閉通知欄
50             }
51         }).start();
52     }
53 }

我們這裡只是簡單的模擬效果實現,為了讓大家瞭解並熟練運用屬性方法,為後期的實體項目做技術儲備。

相關文檔閱讀:

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

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


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

-Advertisement-
Play Games
更多相關文章
  • 相容多瀏覽器就要為每一個瀏覽器寫對應的CSS,太低版本的瀏覽器只能使用圖片做背景。本文結合例子,介紹了當前五大瀏覽器對gradient的支持情況。 ...
  • 最為一個剛入職不久的小白。。。慢慢磨練吧。。。 JS實現頁面返回定位到具體位置 其實瀏覽器也自帶了返回的功能,也就是說,自帶了返回定位的功能。正常的跳轉,返回確實可以定位,但是有些特殊場景就不適用了。例如,某些元素是在某種情況下才加上的,又或者多級定位。 目前,我知道的返回定位到具體位置有兩種方法: ...
  • 一個簡單的js計時函數(多次定時) ...
  • 這幾篇都是我原來首發在 segmentfault 上的地址:https://segmentfault.com/a/1190000004996659 突然想起來我這個博客冷落了好多年了,也該更新一下,呵呵 最近想重寫一下網站的Restful API,原來是用PHP寫的,看到現在nodejs這麼火也想試 ...
  • × 目錄 [1]URI [2]URL語法 [3]字元[4]編碼方法 前面的話 一般地,URL和URI比較難以區分。接下來,本文以區分URL和URI為引子,詳細介紹URL的用法 URI與URL的區別 URI是Uniform Resource Identifier的縮寫,稱為統一資源標識符。URI是一個 ...
  • 方法一:(jQuery方法: 適用所有瀏覽器) HTML頁面: 方法二:(AJAX XMLHTTP方法: 使用ActiveXObject,所以僅支持IE,非IE內核瀏覽器不可用。) <script type="text/javascript"> function chkurl(url) { var  ...
  • 嘿嘿 我也是查網上的啦 然後放到我的博客里來 下次就會了 ...
  • 一個好的app不光要用好的功能,還要有好的界面,這樣內外兼修才算得上是一個好的App。其實跟人一樣,不能只刷帥,要有內涵(看清楚哦,內涵不是指悶騷)。 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...