編輯:關於Android編程
我們在使用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中點擊觸發按鈕的布置:
<?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="顯示進度實圖" />
</LinearLayout>
java代碼實現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實用的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());
//下載進度提示
builder.setContentText("下載"+i+"%");
try {
Thread.sleep(50);//演示休眠50毫秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//下載完成後更改標題以及提示信息
builder.setContentTitle("開始安裝");
builder.setContentText("安裝中...");
//設置進度為不確定,用於模擬安裝
builder.setProgress(0,0,true);
manager.notify(NO_3,builder.build());
// manager.cancel(NO_3);//設置關閉通知欄
}
}).start();
}
}
我們這裡只是簡單的模擬效果實現,為了讓大家了解並熟練運用屬性方法,為後期的實體項目做技術儲備。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持本站。
Android WebView使用(一)
前言Android內置webkit內核的高性能浏覽器,而WebView則是在這個基礎上進行封裝後的一個 控件,WebView直譯網頁視圖,我們可以簡單的看作一個可以嵌套到
android中子線程更新UI的方式淺析
一、為何寫作此文??你是不是經常看到很多書籍中說:不能在子線程中操作ui,不然會報錯。你是不是也遇到了如下的疑惑(見下面的代碼):@Override prote
Android開發之使用Notification.Builder
通知的主要功能是提示功能。例如:短信、推送信息等等。大體使用步驟:1.獲取狀態通知欄管理NotificationManager 是一個系統Service,所以必須通過 g
Qt for Android 編譯安卓原生可執行程序
作為 C/C++ 程序員,有時候我們希望在安卓上運行從 C/C++ 生成的可執行程序,而不是在 Java 中通過 jni 的方式來調用 C