显示Toast消息直到视频安装并播放

时间:2015-01-17 12:05:52

标签: android timer android-handler

我正在Android中开发视频应用程序,我的问题与安装视频有关。

首先,我正在检查视频是否保存在本地内存中,如果是,我是从本地内存播放的。

如果我的Android本地内存中没有视频,我会将其安装到本地内存并播放。

我要做的是,如果视频不存在于本地内存中,请等待10秒钟以安装视频并在活动中显示Toast消息" 视频更新请等待"

安装完成后,应用播放视频。

我尝试使用以下代码,但收到错误。

我该怎么做?

SDCardRootCheck = new File("/mnt/sdcard/" + "/videos/" + name3);

Log.i("SDCardCeck", "" + "" + SDCardRootCheck.exists());

if (!SDCardRootCheck.exists()) {

    Toast.makeText(getApplicationContext(),
            "Video uptaded please wait", 5000).show();

    downloadFiles(videoLink3, name3);

    new Timer().schedule(new TimerTask() {          
        @Override
        public void run() {
            // this code will be executed after 2 seconds 
            vw.setVideoPath("/mnt/sdcard/videos/" + name3);
            vw.start();

        }
    }, 7000);

}else if(SDCardRootCheck.exists()){

    vw.setVideoPath("/mnt/sdcard/videos/" + name3);
    vw.start();

    // video finish listener
    vw.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

        @Override
        public void onCompletion(MediaPlayer mp) { // not playVideo
            // playVideo();

            mp.start();
        }
    });

}

2 个答案:

答案 0 :(得分:0)

您正尝试从另一个线程更改主线程上的用户界面。

你不能这样做。

您可以在下载主题中发送广播消息以与活动进行通信,或者您可以像这样使用somenthing:

runOnUiThread(new Runnable() {
    public void run(){   
    }
});

还要注意Toast.makeTest方法。 duration参数可以是LENGTH_SHORT或LENGTH_LONG。

答案 1 :(得分:0)

您尝试更改主线程并尝试在主线程中运行线程。使用AsyncTask它在后台运行。尝试下面的代码并在`OnCreate()

中调用Asynctask new DownloadTask(this).execute();
public class DownloadTask extends AsyncTask<Void, Void, String>  {

  private ProgressDialog progressDialog; 

  private Context context;

  /**
   * 
   * @param context
   * @param pdfDoc the document of the PDF
   */
  public DownloadTask(Context context) {
      this.context = context;

      progressDialog = new ProgressDialog(context);
  }

  @Override
  protected void onPreExecute() {  
          progressDialog.setMessage("Video Güncelleniyorf...");
          progressDialog.setIndeterminate(true);
          progressDialog.show();
  }

  @Override
  protected String doInBackground(Void... arg0) {
      downloadFiles(videoLink3, name3);
      return null;
      //download here
  }

  @Override
  protected void onPostExecute(final String result) {
        progressDialog.dismiss();
        vw.setVideoPath("/mnt/sdcard/videos/" + name3);
        vw.start();

        // video finish listener
        vw.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {

            @Override
            public void onCompletion(MediaPlayer mp) { // not playVideo
                // playVideo();

                mp.start();
            }
        });

  }
}