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

show Toast mesage till video installation and play it

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

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

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

我想做的是,如果本地内存中不存在视频,请等到 10 秒后安装视频并在 activity 中显示 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();
        }
    });

}

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

你做不到。

您可以在下载线程中发送广播消息与 activity 进行通信,或者您可以使用如下方式:

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

还要注意Toast.makeTest方法。 持续时间参数可以是 LENGTH_SHORT 或 LENGTH_LONG.

您尝试更改主线程并尝试 运行 主线程中的线程。使用 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();
            }
        });

  }
}