رفتن به مطلب
انجمن اندروید ایران | آموزش برنامه نویسی اندروید و موبایل
  • android.png.1fab383bc8500cd93127cebc65b1dcab.png

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


پست های پیشنهاد شده

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

 

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 است که پس از هربار نوشتن چک می شود که آیا کاربر دانلود را متوقف کرده یا نه که اگر نکرده به دانلود ادامه دهد و اگر دکمه توقف توسط کاربرد زده شده دانلود را متوقف می کند.

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

 

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

لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • 7 ماه بعد...

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

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

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

  • مطالب مشابه

    • توسط hami develop
      سلام خدمت دوستان عزیز.
      من یک اپلیکیشن اندروید درست کردم و از کلاس service ارث بری کردم و هر دقیقه یک بار یک وب سایت را چک میکند و در صورتی که اطلاعات جدیدی در این وب سایت وجود داشته باشد به من یک نوتیفیکیشن میدهد.
      آیا بهتر است که از کلاس Worker ارث بری کنم تا برنامه وظایفی را انجام دهد؟
      نکته: در واقع می‌خواهم برنامه برای مدت طولانی اجرا شود و هیچ گاه متوقف نشود.
      اگر کسی از دوستان تجربه کار با Worker را دارد لطفا بفرمایند که اختلاف
      Worker 
      و
      Service 
      دقیقا چی هست و برای برنامه ای که همیشه در بک گراند در حال اجرا است، کدامیک بهتر است؟
      سپاس بی کران.
    • توسط AliAmani
      سلام.وقت بخیر.من به یه ارور بر خوردم. دیباگر attach نمیشه.لطفا راهنماییم کنید.
      اندروید استودیو را حذف و دوباره نصب کردم.avd جدید ایجاد کردم.adb را kill و بعد start کردم.اما درست نشد.
      مشکل فقط در پروژه های اندروید است و در پروژه های فلاتر مشکلی نیست.
      debug.pdf
    • توسط 3245
      سلام
      من درحال اموزش اندروید هستم،
      برای این کار، ویدیوهای ساخت کتاب رو خریدم، اما چون اطلاعاتم خیلی کمه،درک مطالب توی این ویدئو سخته برام
      میخواستم اگرممکنه دوستان کلیپی پیشنهاد بدن که سبک تر باشه و بیشتر به مباحث پایه بپردازه، البته خیلی هم نخواد از صفر شروع کنه که خسته کننده میشه...
      طوری باشه پروژه محور باشه اما پروژه سبکی باشه.
       
      ممنون.
       
       
    • توسط aliazmoodeh
      سلام من یه آپی دارم یه قسمت وجود داره که اطلاعات رو از سرور میگیره و تو ریسایکلرویو نمایش میده من میخوام این اطلاعات رو تو حالت افلاین هم داشته باشم یعنی چی یعنی بتونم اطلاعاتی که از سرور گرفتم قبلا رو وقتی کاربر اینترنت بهش نمایش بدم دقیقن مثله تلگرام میگم ولی نمیدونم باید چیکار کنم اگر اموزشی در این رابط دارید بهم بگید یا سورسی دارید بهم بگید پولی یا رایگان باشه برام فرقی نمیکنه فقط میخوام مشکلمو حل کنه
    • توسط Zeynab Tri
      سلام. دوستان بنده یک عدد تازه کار در برنامه نویسی اندروید هستم و نمیدونم این ارور رو چطور حل کنم. ممنون میشم اگر کسی میتونه من رو راهنمایی کنه.عکسش رو گذاشتم.

  • فایل

×
×
  • اضافه کردن...