編輯:關於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)來更新通知去移除活動指示器。我們總是這樣做,除非你想要讓操作完成的時候,動畫效果還在運行。
也請記住當操作完成的時候更新下通知裡的文本。
知道了這兩點,我們開始實現代碼:
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>
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 listview多視圖嵌套多視圖,androidlistview筆記,listview視圖總結 1 public class HomeEduMoreA
android okvolley框架搭建,androidokvolley最近新出了很多好東西都沒時間去好好看看,現在得好好復習下了,記下筆記 記得以前用的框架是andro
android 打造炫酷導航欄(仿UC頭條) 年後開始上班甚是清閒,所以想搗鼓一些東西。在翻閱大神傑作Android 教你打造炫酷的ViewPagerIndicato
我的android學習經歷15,android學習經歷15利用Intent實現有返回結果的頁面跳轉 主要用的方法: (1)Intent的構造方法:intent(當前界面對