2011-02-07 3 views
2

전에해서 ProgressDialog를 표시 :내가 다음 코드를 사용하여 비디오를 전해서 ProgressDialog를 표시하려고 비디오

package com.Boodang; 

import java.io.File; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.InputStream; 
import java.net.URL; 
import java.net.URLConnection; 

import android.app.Activity; 
import android.app.ProgressDialog; 
import android.content.Context; 
import android.os.Bundle; 
import android.os.Handler; 
import android.os.Message; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.webkit.URLUtil; 
import android.widget.EditText; 
import android.widget.ImageButton; 
import android.widget.ImageView; 
import android.widget.Toast; 
import android.widget.VideoView; 

public class VideoLoading extends Activity implements Runnable { 
    private static final String TAG = "VideoViewDemo"; 

    private VideoView mVideoView; 
    private EditText mPath; 
    private ImageView mPlay; 
    private ImageView mPause; 
    private ImageButton mReset; 
    private ImageView mStop; 
    private String current; 
    private ProgressDialog dialog; 
    private Context mContext; 
    String s=null; 
    @Override 
    public void onCreate(Bundle state){ 

    super.onCreate(state); 


    dialog=ProgressDialog.show(this,"","Loding.PleaseWait",true); 
    Thread t=new Thread(this); 
    t.start(); 
     Log.e("VideoPlay1 page","OnStart"); 
     setContentView(R.layout.videoplay); 


     mPlay = (ImageView) findViewById(R.id.play); 
     mPause = (ImageView) findViewById(R.id.pause); 

     mStop = (ImageView) findViewById(R.id.stop); 

     mPlay.setOnClickListener(new OnClickListener() { 
      public void onClick(View view) { 

      } 
     }); 
     mPause.setOnClickListener(new OnClickListener() { 
      public void onClick(View view) { 
       if (mVideoView != null) { 
        mVideoView.pause(); 
       } 
      } 
     }); 

     mStop.setOnClickListener(new OnClickListener() { 
      public void onClick(View view) { 
       if (mVideoView != null) { 
        current = null; 
        mVideoView.stopPlayback(); 
       } 
      } 
     }); 
    runOnUiThread(new Runnable(){ 
     public void run() { 
       dialog.dismiss(); 
      } 

     }); 


    } 
    public void run(){ 
     Message msg; 
     handler.sendEmptyMessage(0); 
    } 
Handler handler=new Handler(){ 
@Override 
public void handleMessage(Message msg) { 
     try { 

      mVideoView = (VideoView) findViewById(R.id.video); 
      s=getIntent().getStringExtra("id"); 

      final String path = s; 
      Log.v(TAG, "path: " + path); 
      if (path == null || path.length() == 0) { 
      Toast.makeText(VideoLoading.this, "File URL/path is empty", 
         Toast.LENGTH_LONG).show(); 

      } else { 
       // If the path has not changed, just start the media player 
       if (path.equals(current) && mVideoView != null) { 
        mVideoView.start(); 
        mVideoView.requestFocus(); 
       return; 
      } 
      current = path; 
       mVideoView.setVideoPath(getDataSource(path)); 
       mVideoView.start(); 
       mVideoView.requestFocus(); 


      } 
     } catch (Exception e) { 
      Log.e(TAG, "error123: " + e.getMessage(), e); 
      if (mVideoView != null) { 
       mVideoView.stopPlayback(); 
      } 
     } 

    } 
}; 
    private String getDataSource(String path) throws IOException { 
     if (!URLUtil.isNetworkUrl(path)) { 
      return path; 
     } else { 
      URL url = new URL(path); 
      URLConnection cn = url.openConnection(); 
      cn.connect(); 
      InputStream stream = cn.getInputStream(); 
      if (stream == null) 
       throw new RuntimeException("stream is null"); 
      File temp = File.createTempFile("mediaplayertmp", "dat"); 
      temp.deleteOnExit(); 
      String tempPath = temp.getAbsolutePath(); 
      FileOutputStream out = new FileOutputStream(temp); 
     byte buf[] = new byte[128]; 
      do { 
      int numread = stream.read(buf); 
       if (numread <= 0) 
        break; 
       out.write(buf, 0, numread); 


      } while (true); 

      try { 
       stream.close(); 

      } catch (IOException ex) { 
       Log.e(TAG, "error: " + ex.getMessage(), ex); 
      } 
      return tempPath; 
     } 
    } 


} 

하지만 난 여기에 진행률 표시 줄을하지 않습니다. 내가 얻는 것은 직접 비디오입니다.

모든 도움을 주실 수 있습니다.

답변

4

대신 runOnUiThread에서 진행 대화 상자를 기각의, onPreparedListener에 해고 :

mVideoView.setOnPreparedListener(new OnPreparedListener() { 

    public void onPrepared(MediaPlayer arg0) { 
     dialog.dismiss(); 
     mVideoView.start(); 
    } 
}); 

runOnUiThread는 그것을 볼 수 있습니다 전에 그러므로 대화를 dimissing, 바로이라고합니다. 이 코드는 동영상을 시작할 준비가 될 때까지 계속 진행합니다.

+0

당신은 나를 도왔습니다. 많이 ... 고맙습니다 ... 진행 대화 상자가 보이지 않는 이유를 알아 내려고했습니다. – Yogamurthy

0

이렇게하려면 AsyncTask를 사용해야합니다. this page에보십시오. 그것은 당신이 원하는 것을하는 방법에 대한 상세한 정보를 제공합니다.

0

동 기 MediaPlayer 호출에서 멀리 이동해야합니다. MediaPlayer에는 onPreparedListener과 같은 일련의 플레이어 상태 변경 콜백이 있으며 대화 상자를 표시 할시기를 결정하는 데 사용해야합니다.

당신이 겪고있는 것은 uiThread에 작업을 넣고 있지만 기본적으로 모든 작업을 uiThread에 넣기 때문입니다.

호출은 :

  mVideoView.setVideoPath(getDataSource(path)); 

는 uiThread (겉보기)에 것입니다. 비동기 리스너를 사용하여 이러한 기능을 직접 구축하지 않아도됩니다.

관련 문제