歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Android安裝過程對話框更新Demo

Android安裝過程對話框更新Demo

日期:2017/3/1 11:10:45   编辑:Linux編程

最近在做一個批量安裝卸載的管理器,在安裝的過程中要顯示安裝信息,比如說:"正在安裝XX1.apk 正在安裝XX2.apk“當然這個顯示是在對話框上面顯示的。怎麼做呢?實現是這樣的:

1、在Activity中重寫onCreateDialog(int id)方法;

2、使用Handler更新對話框的信息;

3、用線程監控安裝信息,將信息設置在Message中通過Handler發送。

具體實現請看代碼:

  1. package cn.tch.cdg;
  2. import Android.app.Activity;
  3. import android.app.AlertDialog;
  4. import android.app.Dialog;
  5. import android.os.Bundle;
  6. import android.os.Handler;
  7. import android.os.Message;
  8. import android.view.View;
  9. import android.view.View.OnClickListener;
  10. import android.widget.Button;
  11. public class CustomDialogActivity extends Activity {
  12. private static final int PROGRESS_DIALOG = 0;
  13. private Button btnShowDialog;
  14. private ProgressThread mProgressThread;
  15. private Dialog mDialog;
  16. public void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.main);
  19. btnShowDialog = (Button) findViewById(R.id.progressDialog);
  20. btnShowDialog.setOnClickListener(new OnClickListener(){
  21. public void onClick(View v) {
  22. showDialog(PROGRESS_DIALOG);
  23. }
  24. });
  25. }
  26. protected Dialog onCreateDialog(int id) {
  27. switch(id) {
  28. case PROGRESS_DIALOG:
  29. mDialog = new AlertDialog.Builder(CustomDialogActivity.this).create();
  30. mDialog.setTitle("請稍候");
  31. ((AlertDialog) mDialog).setMessage("");
  32. mProgressThread = new ProgressThread(handler);
  33. mProgressThread.start();
  34. return mDialog;
  35. default:
  36. return null;
  37. }
  38. }
  39. final Handler handler = new Handler() {
  40. public void handleMessage(Message msg) {
  41. int total = msg.getData().getInt("total");
  42. String message = msg.getData().getString("message");
  43. ((AlertDialog) mDialog).setMessage(message);
  44. if (total >= 100){
  45. dismissDialog(PROGRESS_DIALOG);
  46. mProgressThread.setState(ProgressThread.STATE_DONE);
  47. }
  48. }
  49. };
  50. private class ProgressThread extends Thread {
  51. Handler mHandler;
  52. final static int STATE_DONE = 0;
  53. final static int STATE_RUNNING = 1;
  54. int mState;
  55. int mTotal;
  56. ProgressThread(Handler handler) {
  57. mHandler = handler;
  58. }
  59. public void run() {
  60. mState = STATE_RUNNING;
  61. mTotal = 0;
  62. while (mState == STATE_RUNNING) {
  63. Message msg = mHandler.obtainMessage();
  64. Bundle bundle = new Bundle();
  65. bundle.putInt("total", mTotal);
  66. bundle.putString("message", "正在安裝:"+mTotal); // 設置Message
  67. msg.setData(bundle);
  68. mHandler.sendMessage(msg);
  69. mTotal++;
  70. try {
  71. Thread.sleep(300);
  72. } catch (InterruptedException e) {
  73. e.printStackTrace();
  74. }
  75. }
  76. }
  77. public void setState(int state) {
  78. mState = state;
  79. }
  80. }
  81. }

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:orientation="vertical"
  4. android:layout_width="fill_parent"
  5. android:layout_height="fill_parent"
  6. >
  7. <Button
  8. android:id="@+id/progressDialog"
  9. android:layout_width="fill_parent"
  10. android:layout_height="wrap_content"
  11. android:text="顯示對話框"/>
  12. </LinearLayout>
Copyright © Linux教程網 All Rights Reserved