詳解Android中使用Notification實(shí)現(xiàn)進(jìn)度通知欄(示例三)
我們?cè)谑褂肁PP的過程中,軟件會(huì)偶爾提示我們進(jìn)行版本更新,我們點(diǎn)擊確認(rèn)更新后,會(huì)在通知欄顯示下載更新進(jìn)度(已知長(zhǎng)度的進(jìn)度條)以及安裝情況(不確定進(jìn)度條),這就是我們今天要實(shí)現(xiàn)的功能。實(shí)現(xiàn)效果如下:

在代碼實(shí)現(xiàn)功能前,我們先解釋進(jìn)度條的兩種狀態(tài):
(1)顯示一個(gè)已知長(zhǎng)度的進(jìn)度條指示器(Displaying a fixed-duration progress indicator)
為了能夠顯示一個(gè)確定的進(jìn)度條,通過調(diào)用setProgress() setProgress(max, progress, false)給你的通知加上進(jìn)度條。然后發(fā)布通知。然后,隨著操作的進(jìn)度,增加進(jìn)度值,然后更新通知。在操作結(jié)束的時(shí)候,進(jìn)度值應(yīng)該等于最大值。通常的方式是調(diào)用setProgress()來設(shè)置最大值為100,然后去增加進(jìn)度完成的百分比。你可以在操作完成的時(shí)候顯示進(jìn)度條,也可以移除掉它。在這樣的情況下,記住要去更新通知的文本,顯示操作已經(jīng)完成了。調(diào)用setProgress(0, 0, false)來移除進(jìn)度條。
public Builder setProgress(int max, int progress, boolean indeterminate)
其中max為進(jìn)度最大值,progress為當(dāng)前進(jìn)度,indeterminate為不確定的(設(shè)置為true,則為不確定的,反之則確定)
(2)顯示一個(gè)持續(xù)的活動(dòng)指示器(Displayinga continue activity indicator)
為了能使用不確定的活動(dòng)指示器,使用setProgress(0, 0, true)方法來給你的通知添加(前兩個(gè)參數(shù)被忽略了),然后發(fā)布通知。除非去指定它的動(dòng)畫效果,要不然,這個(gè)指示器的樣式都是一樣的。
在操作開始的時(shí)候發(fā)布通知,這個(gè)動(dòng)畫將一直執(zhí)行,直到你修改通知,當(dāng)操作完成的時(shí)候,調(diào)用setProgress(0, 0,false)來更新通知去移除活動(dòng)指示器。我們總是這樣做,除非你想要讓操作完成的時(shí)候,動(dòng)畫效果還在運(yùn)行。
也請(qǐng)記住當(dāng)操作完成的時(shí)候更新下通知里的文本。
知道了這兩點(diǎn),我們開始實(shí)現(xiàn)代碼:
layout中點(diǎn)擊觸發(fā)按鈕的布置:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.administrator.day12.ContentActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:textSize="30sp"
android:text="顯示進(jìn)度實(shí)圖" />
</LinearLayout>
java代碼實(shí)現(xiàn)MainActivity.java:
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.graphics.BitmapFactory;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.app.NotificationCompat;
import android.view.View;
import android.widget.RemoteViews;
public class MainActivity extends AppCompatActivity {
//定義notification實(shí)用的ID
private static final int NO_3 =0x3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public void show3(View v){
final NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setSmallIcon(R.mipmap.huangyueying);
builder.setContentTitle("下載");
builder.setContentText("正在下載");
final NotificationManager manager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
manager.notify(NO_3, builder.build());
builder.setProgress(100,0,false);
//下載以及安裝線程模擬
new Thread(new Runnable() {
@Override
public void run() {
for(int i=0;i<100;i++){
builder.setProgress(100,i,false);
manager.notify(NO_3,builder.build());
//下載進(jìn)度提示
builder.setContentText("下載"+i+"%");
try {
Thread.sleep(50);//演示休眠50毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//下載完成后更改標(biāo)題以及提示信息
builder.setContentTitle("開始安裝");
builder.setContentText("安裝中...");
//設(shè)置進(jìn)度為不確定,用于模擬安裝
builder.setProgress(0,0,true);
manager.notify(NO_3,builder.build());
// manager.cancel(NO_3);//設(shè)置關(guān)閉通知欄
}
}).start();
}
}
我們這里只是簡(jiǎn)單的模擬效果實(shí)現(xiàn),為了讓大家了解并熟練運(yùn)用屬性方法,為后期的實(shí)體項(xiàng)目做技術(shù)儲(chǔ)備。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
簡(jiǎn)單掌握Android Widget桌面小部件的創(chuàng)建步驟
這篇文章主要介紹了簡(jiǎn)單掌握Android Widget桌面小部件的創(chuàng)建步驟,Widget一般采用web前端技術(shù)進(jìn)行開發(fā),需要的朋友可以參考下2016-03-03
Android onbackpressed實(shí)現(xiàn)返回鍵的攔截和彈窗流程分析
很多網(wǎng)友不明白如何在Android平臺(tái)上捕獲Back鍵的事件,Back鍵是手機(jī)上的后退鍵,一般的軟件不捕獲相關(guān)信息可能導(dǎo)致你的程序被切換到后臺(tái),而回到桌面的尷尬情況,在Android上有兩種方法來獲取該按鈕的事件2023-01-01
Android App使用SQLite數(shù)據(jù)庫(kù)的一些要點(diǎn)總結(jié)
這篇文章主要介紹了Android App使用SQLite數(shù)據(jù)庫(kù)的一些要點(diǎn)總結(jié),使用Sqlite作為應(yīng)用的嵌入式數(shù)據(jù)庫(kù)非常輕便,需要的朋友可以參考下2016-03-03
Android ListView 單條刷新方法實(shí)踐及原理解析
這篇文章主要介紹了Android ListView 單條刷新方法實(shí)踐及原理解析的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-07-07
Android權(quán)限管理之Permission權(quán)限機(jī)制及使用詳解
本篇文章主要介紹了Android權(quán)限管理之Permission權(quán)限機(jī)制及使用,主要講訴了android的權(quán)限使用問題,有需要的可以了解一下。2016-11-11
Android操作存放在assets文件夾下SQLite數(shù)據(jù)庫(kù)的方法
這篇文章主要介紹了Android操作存放在assets文件夾下SQLite數(shù)據(jù)庫(kù)的方法,實(shí)例分析了Android操作SQLite數(shù)據(jù)庫(kù)的相關(guān)技巧,需要的朋友可以參考下2015-06-06
Android開發(fā)案例手冊(cè)Application跳出dialog
這篇文章主要為大家介紹了Android開發(fā)案例手冊(cè)Application跳出dialog,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06
Android編程實(shí)現(xiàn)簡(jiǎn)單的UDP Client實(shí)例
這篇文章主要介紹了Android編程實(shí)現(xiàn)簡(jiǎn)單的UDP Client,結(jié)合實(shí)例形式分析了Android實(shí)現(xiàn)UDP Clinet客戶端的實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-04-04

