在我的Android应用程序中,我正在使用视频视频播放视频。当视频下载时,我正在显示进度对话框。
有时不支持流式传输或出现错误时,屏幕上会显示错误消息。单击错误消息后,进度对话框会再次显示该消息并尝试下载。
但是如果有任何错误消息,并且只要用户点击“确定”并返回视频播放器,我就会拒绝此对话
以便用户可以浏览下一个或上一个视频。
private ProgressDialog mProgressDialog;
Handler myUiHandler = new Handler();
boolean m_prgisShowing = false;
private static final int DIALOG_100 = 0;
ProgressDialog mDialog2;
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer mp) {
Log.i("Manju", "OnPrepared");
myUiHandler.post(myDilgDismis);
mVideoView.start();
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_100: {
mDialog2 = new ProgressDialog(this);
mDialog2.setMessage("buffering...");
mDialog2.setIndeterminate(true);
mDialog2.setCancelable(true);
return mDialog2;
}
}
return null;
}
Runnable myDilgShow = new Runnable() {
public void run() {
show_My_Dialog();
}
};
Runnable myDilgDismis = new Runnable() {
public void run() {
dismiss_My_Dialog();
}
};
public void show_My_Dialog() {
m_prgisShowing = true;
showDialog(DIALOG_100);
}
public void dismiss_My_Dialog() {
if (m_prgisShowing) {
try {
if (null != mDialog2) {
mDialog2.dismiss();
}
} catch (Exception e) {
e.printStackTrace();
m_prgisShowing = false;
}
}
m_prgisShowing = false;
}
请分享您宝贵的建议。
提前致谢
答案 0 :(得分:1)
我假设您使用AsyncTask进行线程处理,在本例中是用于流式传输或下载。然后你实现了
onProgressUpdate
功能。在此功能中,您将更新进度对话框以显示当前的流状态。要关闭进度对话框,您必须将其可见性设置为false或将其从布局中完全删除。在onProgressUpdate中,您需要一个if语句或类似的东西来捕获错误并关闭对话框。
编辑:
代码显示您使用runnable接口来实现线程,这对于基本的Java开发很有用。但是android sdk有一个特别针对Android开发的解决方案叫做异步任务。建议使用它。
E.g。您可以将一个私有类添加到oncreate方法所在的主java文件中。
private class MediaPlayer extends AsyncTask<Params, Progress, Result> {
}
一个。参数:执行时发送给任务的参数类型。
湾进度:后台计算期间发布的进度单元的类型。
℃。结果:后台计算结果的类型。
每个异步任务都实现以下方法。 AsyncTask将经历的4个步骤:
一个。 onPreExecute() - 立即在UI线程上调用
- &GT;在后台计算开始之前调用
- &GT;做一些设置(例如,显示进度对话框)
湾 doInBackground(Params ...) - 在后台线程上调用
- &GT;在onPreExecute()
之后立即调用- &GT;在后台线程中执行可能需要很长时间的计算。
- &GT;使用 publishProgress(进度...)来触发UI更新进度
- &GT;进度将传递给onProgressUpdate(Progress ...)
℃。 onProgressUpdate(进度...) - 在UI线程上调用
- &GT;更新进度
d。 onPostExecute(Result) - 在UI线程上调用
- &GT;在后台计算完成后调用
- &GT;结果将从doInBackground(Params ...)
传递如何启动AsyncTask?
new MyTask().execute(param1, param2, param3);
这是一个小概述。我强烈建议你阅读文档。