私のアプリケーションでは、ファイルをクリックするとサーバーからダウンロードが開始され、進行状況は電話ステータスバーに表示されます。しかし、私はアプリケーション画面自体にプログレスバーを表示します。断片のダウンロード進捗ダイアログのための非同期タスクの使用方法?
私は、このリンクに続く: - 問題文を近づいている間、私はこれらのSYSTEM_DOWNLOADER
に遭遇し、APP_DOWNLOADER
http://www.androidhive.info/2012/04/android-downloading-file-by-showing-progress-bar/
を。
これらは正確に何ですか?
上記の例はアクティビティで呼び出されています。フラグメントのダウンロードプログレスバーでAsynchタスクを呼び出す方法を知りたかったのです。
私は明確化のために、質問を編集しています、私は、ファイルをクリックすると、アプリが強制stop.whatミスを与える
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
MoodleModule module = listObjects.get(position).module;
if (module == null)
return;
Intent i = new Intent(context, AppBrowserActivity.class);
String modurl = module.getUrl();
String courseurl = session.getmUrl()
+ "/course/view.php?id=" + courseid;
modurl = (modurl == null) ? courseurl : modurl;
i.putExtra("url", modurl);
if (!module.getModname().contentEquals("resource")) {
context.startActivity(i);
return;
}
if (module.getContents() == null) {
context.startActivity(i);
return;
}
if (module.getContents().isEmpty()) {
context.startActivity(i);
return;
}
MoodleModuleContent content = module.getContents().get(0);
String path = "/s" + session.getCurrentSiteId() + "c"
+ courseid + "/";
File file = new File(Environment
.getExternalStoragePublicDirectory("/MDroid")
+ path + content.getFilename());
//TODO here
// Download if file doesn't already exist
if (!file.exists()) {
String fileurl = content.getFileurl();
fileurl += "&token=" + session.getToken();
fName=content.getFilename();
//FROM HERE I AM CALLING ASYNCHRONOUS TASK
startDownload();
} else {
FileOpener.open(context, file);
}
}
});
return convertView;
}
private void startDownload() {
String url = "http://farm1.static.flickr.com/114/298125983_0e4bf66782_b.jpg";
new DownloadFileAsync().execute(url);
}
protected Dialog onCreateDialog(int id) {
switch (id) {
case DIALOG_DOWNLOAD_PROGRESS:
mProgressDialog = new ProgressDialog(getActivity());
mProgressDialog.setMessage("Downloading file..");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setCancelable(false);
return mProgressDialog;
default:
return null;
}
}
class DownloadFileAsync extends AsyncTask<String, String, String> {
@Override
protected void onPreExecute() {
super.onPreExecute();
/*mProgressDialog = new ProgressDialog(getActivity());
mProgressDialog.setMessage("Downloading file.");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mProgressDialog.setCancelable(false);
mProgressDialog.show();*/
/*showDialog(DIALOG_DOWNLOAD_PROGRESS);*/
mProgressDialog.show();
}
@Override
protected String doInBackground(String... aurl) {
int count;
/*String fName=content.getFilename();*/
/*InputStream input = null;
OutputStream output = null;*/
HttpURLConnection connection = null;
try {
URL url = new URL(aurl[0]);
URLConnection conexion = url.openConnection();
conexion.connect();
int lenghtOfFile = conexion.getContentLength();
Log.d("ANDRO_ASYNC", "Lenght of file: " + lenghtOfFile);
/* File f = new File(Environment.getExternalStorageDirectory()
+ "/sdcard/");
f.mkdirs();*/
InputStream input = new BufferedInputStream(url.openStream());
OutputStream output = new FileOutputStream("/sdcard/some_photo_from_gdansk_poland.jpg");
byte data[] = new byte[1024];
long total = 0;
while ((count = input.read(data)) != -1) {
total += count;
publishProgress(""+(int)((total*100)/lenghtOfFile));
output.write(data, 0, count);
}
output.flush();
output.close();
input.close();
} catch (Exception e) {}
return null;
}
protected void onProgressUpdate(String... progress) {
mProgressDialog.setProgress(Integer.parseInt(progress[0]));
/* mProgressDialog.dismiss();*/
}
@Override
protected void onPostExecute(String unused) {
/*dismissDialog(DIALOG_DOWNLOAD_PROGRESS);*/
mProgressDialog.dismiss();
}
}
私は
ように私のフラグメント活動にDownloadTask.javaクラスファイルからこのダウンロード方法と呼ばれますあなたのファイルがダウンロードされるまで。 – Piyush
だから私はこれらの2つの違いを知る必要がある –
_DownloadManager_を使用すると、ファイルがダウンロードされるまで進捗状況が通知バーに表示され、 'AsyncTask'内で' ProgressBar'または 'ProgressDialog'を使用すると、 'AsyncTask'の' onPostExecuted() 'メソッド – Piyush