我正在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();
}
});
}
答案 0 :(得分:0)
您正尝试从另一个线程更改主线程上的用户界面。
你不能这样做。
您可以在下载主题中发送广播消息以与活动进行通信,或者您可以像这样使用somenthing:
runOnUiThread(new Runnable() {
public void run(){
}
});
还要注意Toast.makeTest方法。 duration参数可以是LENGTH_SHORT或LENGTH_LONG。
答案 1 :(得分:0)
您尝试更改主线程并尝试在主线程中运行线程。使用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();
}
});
}
}