0

ボタンをクリックしてアクティビティを開いています。次のアクティビティは、ボタンをクリックするとサーバーからビデオを再生するためのものです。黒くなり、5〜6秒後にビデオの再生が開始されます。黒い画面を回避するにはどうすればよいですか?

これが私のコードです:

mPreview=new SurfaceView(getApplicationContext()); 
l1.addView(mPreview); 
holder = mPreview.getHolder(); 
holder.addCallback(this);
holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
extras = getIntent().getExtras(); 

以下の内容は表面処理工法の内容です。

        path = "http://www.pixintro.com/upload/video/Benetton.mp4";
        mMediaPlayer = new MediaPlayer();
        mMediaPlayer.setDataSource(Environment.getExternalStorageDirectory()+"/Benetton.mp4");
        mMediaPlayer.setDataSource(path);
        mMediaPlayer.setDisplay(holder);
        mMediaPlayer.prepare();
        mMediaPlayer.setOnBufferingUpdateListener(this);
        mMediaPlayer.setOnCompletionListener(this);
        mMediaPlayer.setOnPreparedListener(this);
        mMediaPlayer.setOnVideoSizeChangedListener(this);
        mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

public void onPrepared(MediaPlayer mediaplayer){
       mIsVideoReadyToBePlayed = true;
       if (mIsVideoReadyToBePlayed && mIsVideoSizeKnown){
               holder.setFixedSize(mVideoWidth, mVideoHeight);
               mMediaPlayer.start();
       }
}
4

2 に答える 2

2

非同期タスクを使用できます 。処理が doInBackground() で、つまりバックグラウンドで行われている間。タスクが完了すると (onPostExecute) すぐに閉じられる進行状況ダイアログ (onPreExecute()) を表示できます。

public class DisplayActivity extends Activity {
     @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_screen);
          // create surface view etc
              new Operation().execute();
}



}

 private class Operation extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... params) {
    // code to be executed in background thread 

    for(int i=0;i<5;i++) {
    try {
    Thread.sleep(1000);
    } catch (InterruptedException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    return "Executed";
    } 

    @Override
    protected void onPostExecute(String result) {
    // runs on UI thread and updated UI after executing doInBackground
    progressDialog.dismiss();
    }

    @Override
    protected void onPreExecute() {
    ProgressDialog progressDialog = ProgressDialog.show(MainActivity.this, "Title ", "Loading...");
    progressDialog.show();

    }

    @Override
    protected void onProgressUpdate(Void... values) {
    // runs on UI thread and starts first

    }
    } 
于 2013-03-02T11:51:56.660 に答える
0

このインターフェースを見てください。メディアを再生する準備ができたときのコールバックが含まれています。

MediaPlayerにはprepareAsyncメソッドもあります。詳細についてはこちらをお読みください

于 2013-03-02T11:38:48.520 に答える