2011年3月19日 星期六

ProgressDialog 進度表

在下載時如果沒有進度表,很難知道要下載到什麼時候,android有ProgressDialog結合handler聆聽下載進度,可讓user知道目前下載狀況...

 public ProgressDialog myDialog = null;
  public void onCreate(Bundle savedInstanceState) {
           /* 捕捉若使用MediaPlayer緩衝區事件 */
          mMediaPlayer01.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener()
          {
            @Override
            public void onBufferingUpdate(MediaPlayer mp, int percent)
            {
             Message m=new Message();
             Bundle data=m.getData();
             /* 將進度放入Message中 */
             data.putInt("percent",percent);
             m.setData(data);
             /* send Message */
             handler.sendMessage(m);
            }
          });
 }
   // 顯示Progress對話方塊
   //myDialog = ProgressDialog.show(KRadio.this,strDialogTitle,strDialogBody,true);
   myDialog=new ProgressDialog(KRadio.this);
   myDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
   myDialog.setMax(100);    /* 設定最大單位 */
   myDialog.setProgress(0);    /* 設定初始值 */
   myDialog.setTitle(getString(R.string.str_dialog_title));
   myDialog.setMessage(getString(R.string.str_dialog_body));
   myDialog.show();
 //Thread裡放textview會造成其他地方無法控制(setText)
  new Thread()
  {
    public void run()
    {
      try
      {
     /* 在這裡寫上要背景執行的程式片段 */
     if (mMediaPlayer01!=null)
    {
      mMediaPlayer01.reset();
    }
   strPath = "rtsp://64.202.98.91:554/gs64.sdp";
   mMediaPlayer01.setDataSource(strPath);
   mMediaPlayer01.prepare();
   mMediaPlayer01.start();
      }
      catch (Exception e)
      {
        e.printStackTrace();
      }
      finally
      {
        // 卸載所建立的myDialog物件。
        myDialog.dismiss();
      }
    }
  }.start();
            }
      catch(Exception e){
        Toast.makeText(KRadio.this,e.toString() , Toast.LENGTH_SHORT).show();
       }

    /* Handler建構之後,會聆聽傳來的訊息代碼 , 聽取網站下載進度 */
    private Handler handler = new Handler()
    {
      @Override
      public void handleMessage(Message msg)
      {
        /* 取得回傳的進度值 */
        int p=msg.getData().getInt("percent");
        if(p==100)
        {
         myDialog.dismiss();
        }
        else
        {
         /* 下載中UPDATE進度數值 */
         myDialog.setProgress(p);
        }
      }
    };

*參考自 Google Android SDK開發範例大全2 (8-20)

標籤: ,

0 個意見:

張貼留言

訂閱 張貼留言 [Atom]

<< 首頁