显示 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();
}
});
}
}
我正在 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()
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();
}
});
}
}