Majid Ebrahimi

آموزش دانلود فایل در دیالوگ باکس با قابلیت لغو دانلود

3 ارسال در این موضوع قرار دارد

در این آموزش می خواهیم دانلود فایل در دیالوگ باکس با قابلیت لغو دانلود را برای شما آموزش دهیم ابتدا کد برنامه:

 

import java.io.BufferedInputStream;

import java.io.File;

import java.io.FileOutputStream;

import java.io.InputStream;

import java.io.OutputStream;

import java.net.URL;

import java.net.URLConnection;

import android.app.Activity;

import android.app.ProgressDialog;

import android.content.DialogInterface;

import android.os.AsyncTask;

import android.os.Bundle;

import android.util.Log;

public class DownloadActivity extends Activity {

/** Called when the activity is first created. */

boolean isRun = false; ;

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

new DownloadFileFromURL().execute("http://hw14.asset.aparat.com/aparat-video/1d7288ace5ce9cc812f6cf5b99d2b8b62642090-360p__87605.mp4");

isRun = true;

}

private final class onCancelClick implements DialogInterface.OnClickListener {

@Override

public void onClick(DialogInterface arg0, int arg1) {

isRun = false;

}

}

class DownloadFileFromURL extends AsyncTask {

private ProgressDialog pDialog;

/**

* Before starting background thread

* Show Progress Bar Dialog

* */

@SuppressWarnings("deprecation")

@Override

protected void onPreExecute() {

super.onPreExecute();

pDialog = new ProgressDialog(DownloadActivity.this);

pDialog.setMessage("موسیقی مورد نظر در حال دانلود است...");

pDialog.setIndeterminate(false);

pDialog.setMax(100);

pDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);

pDialog.setCancelable(false);

pDialog.setButton("لغو", new onCancelClick());

pDialog.show();

}

/**

* Downloading file in background thread

* */

@Override

protected String doInBackground(String... f_url) {

int count;

try {

URL url = new URL(f_url[0]);

URLConnection conection = url.openConnection();

conection.connect();

// getting file length

int lenghtOfFile = conection.getContentLength();

// input stream to read file - with 8k buffer

InputStream input = new BufferedInputStream(url.openStream(), 8192);

// Output stream to write file

File f = new File("sdcard/ff.mp3");

OutputStream output = new FileOutputStream(f);

byte data[] = new byte[1024];

long total = 0;

while ((count = input.read(data)) != -1) {

total += count;

// publishing the progress....

// After this onProgressUpdate will be called

publishProgress("" + (int) ((total * 100) / lenghtOfFile));

// writing data to file

output.write(data, 0, count);

if ( !isRun) {

f.delete();

break;

}

}

// flushing output

output.flush();

// closing streams

output.close();

input.close();

}

catch (Exception e) {

Log.e("Error: ", e.getMessage());

}

return null;

}

@Override

protected void onProgressUpdate(String... progress) {

pDialog.setProgress(Integer.parseInt(progress[0]));

}

@SuppressWarnings("deprecation")

@Override

protected void onPostExecute(String file_url) {

pDialog.dismiss();

}

}

}

 

همانطور که مشهود است از یک کلاس آسینک تسک استفاده شده برای دانلود فایل و پس از تنظیمات اولیه دیالوگ در متد onPreExecute در متد doInBackground کارهای اصلی انجام می شود. که فایل دانلود و در اس دی کارد نوشته یا ذخیره می شود اما قسمت مهم این کار متغیر isRun است که پس از هربار نوشتن چک می شود که آیا کاربر دانلود را متوقف کرده یا نه که اگر نکرده به دانلود ادامه دهد و اگر دکمه توقف توسط کاربرد زده شده دانلود را متوقف می کند.

اما باید توجه داشته باشبید که پرمیشن های زیر را در فایل منیفست اضافه کنید.

 

امیدوارم این آموزش راهنمای خوبی برای شما دوستان باشد.

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

با تشکر

یه سوال

متد onPreExecute اتوماتیک فراخوانی میشه؟ آخه توی کلاس اصلیش هم چیزی نوشته نشده.

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

وفتی isRun=TURE باشه این پروسس انجام میشه و onPreExecute اجرا میشه بلکه اتوماتیک اجرا میشه اگه isRun=TURE باشه موفق و سر بلند باشید

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری