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 باشه موفق و سر بلند باشید

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


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

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

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

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

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


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

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

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


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

  • مطالب مشابه

    • توسط Omid Zakeri
      یک کتابخانه بسیار زیبا که جابجایی بین تب ها در فرگمنت ها را بصورت حبابی نمایش می دهد
       
       

       
       

       
      دانلود :
      compile 'com.github.florent37:bubbletab:1.0.2'  
      BubbleTab را به صورت زیر به layout.xml خود اضافه کنید
      شما میتوانید دو پارامتر زیر را اضافه کنید
      circleColor circleRatio <com.github.florent37.bubbletab.BubbleTab android:id="@+id/bubbleTab" android:layout_width="match_parent" android:layout_height="wrap_content" android:clipToPadding="false" android:background="@android:color/white" android:elevation="10dp" app:bubbleTab_circleColor="@color/colorAccent" app:bubbleTab_circleRatio="1.25" > <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:padding="16dp" android:src="@drawable/bubbletab_ic_hourglass_selector" /> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:padding="16dp" android:src="@drawable/bubbletab_ic_event_selector" /> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:padding="16dp" android:src="@drawable/bubbletab_ic_query_selector" /> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:padding="16dp" android:src="@drawable/bubbletab_ic_search_selector" /> <ImageView android:layout_width="match_parent" android:layout_height="match_parent" android:layout_weight="1" android:padding="16dp" android:src="@drawable/bubbletab_ic_home_selector" /> </com.github.florent37.bubbletab.BubbleTab> <android.support.v4.view.ViewPager android:id="@+id/viewPager" android:layout_width="match_parent" android:layout_height="match_parent"/>  
       
      سپس برای set کردن viewPager از روش زیر استفاده کنید
      bubbleTab.setupWithViewPager(viewPager);  
       
       
      پشتیبانی: BubbleTab
       
      BubbleTab-master.zip
    • توسط jonoob
      سلام
      وقت همگی بخیر
      من یک دیتا بیس دارم حدود 10 هزار ردیف و بیست ستون هست
      میخواهم از طریق چک باکس مشخص کنم در کدام ستون جستجو کند
      لطفا در صورت امکان کدنویسی مربوط اتصال به دیتابیس و سایر مواردی که مورد نیاز هست بفرمایید\
      من یک تازه کارم
      متشکرم
    • توسط cnankh
      سلام ، من هر پروژه ای که با اندروید استودیو ازش خروجی میگیرم ، فقط و فقط روی گوشی هایی که 7.1.1 هستن ران میشه ، درحالی ک موقع ساخت پروژه پایین ترین لول api هم انتخاب میکنم ، یعنی با هر نوع api که فکرشو کنین امتحان کردم اما بازم نتیجه نداد ، کسی میدونه مشکل کجاس؟
    • توسط hackn82
      سلام خدمت اساتید گرامی . 

      من یه برنامه نوشتن که برای یادگیری لغاته . وقتی کاربر لغتی رو به بخش علاقه مندی اضافه می کنه لغت نمایش داده نمیشه و باید برنامه رو مجدد اجرا کرد تا لغت انتخاب شده به بخش علاقه مندی اضافه/ حذف بشه . همچنین بعد از هر بار اجرا لیست لغات تکرار میشه ( مثلا بار دوم از هر کدوم 2 سری بار سوم از هرکدوم 3 سری و ... ) ایجاد میشه . ممنون میشم راهنماییم کنید . 
       
      package farmani.com.essentialwordsforielts.mainPage; import android.Manifest; import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.pm.PackageManager; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.os.Build; import android.os.Environment; import android.support.annotation.NonNull; import android.support.design.widget.NavigationView; import android.support.design.widget.TabLayout; import android.support.v4.app.ActivityCompat; import android.support.v4.content.ContextCompat; import android.support.v4.view.ViewPager; import android.support.v4.widget.DrawerLayout; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Gravity; import android.view.MenuItem; import android.view.View; import android.widget.ImageView; import android.widget.Toast; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import farmani.com.essentialwordsforielts.R; import farmani.com.essentialwordsforielts.search.ActivitySearch; public class MainActivity extends AppCompatActivity { public static Context context; public static ArrayList<Structure> list = new ArrayList<>(); public static ArrayList<Structure> favorite = new ArrayList<>(); DrawerLayout drawerLayout; NavigationView navigationView; ImageView hamburger; SQLiteDatabase database; String destPath; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.navigation_activity_main); if (Build.VERSION.SDK_INT >= 23) { if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(MainActivity.this , new String[]{Manifest.permission.READ_EXTERNAL_STORAGE , Manifest.permission.WRITE_EXTERNAL_STORAGE} , 1); } else if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(MainActivity.this , new String[]{Manifest.permission.READ_EXTERNAL_STORAGE , Manifest.permission.WRITE_EXTERNAL_STORAGE} , 1); } else { setupDB(); selectList(); selectFavorite(); Toast.makeText(MainActivity.this, "You grandet earlier", Toast.LENGTH_LONG).show(); } } if (!favorite.isEmpty()){ favorite.clear(); selectFavorite(); } else if (!list.isEmpty()){ list.clear(); selectList(); } context = getApplicationContext(); setTabOption(); drawerLayout = findViewById(R.id.navigation_drawer); navigationView = findViewById(R.id.navigation_view); hamburger = findViewById(R.id.hamburger); hamburger.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { drawerLayout.openDrawer(Gravity.START); } }); navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { int id = item.getItemId(); if (id == R.id.exit) { AlertDialog.Builder alertDialog = new AlertDialog.Builder( MainActivity.this); alertDialog.setTitle(R.string.exit); alertDialog.setMessage(R.string.exit_ask); alertDialog.setCancelable(false); alertDialog.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { finish(); } }); alertDialog.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); alertDialog.show(); } if (id == R.id.search) { Intent intent = new Intent(MainActivity.this, ActivitySearch.class); MainActivity.this.startActivity(intent); } return true; } }); } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { switch (requestCode) { case 1: { if (grantResults.length >= 2 && grantResults[0] == PackageManager.PERMISSION_GRANTED && grantResults[1] == PackageManager.PERMISSION_GRANTED) { Toast.makeText(MainActivity.this, "Access granted", Toast.LENGTH_LONG).show(); } } } } @Override public void onBackPressed() { if (drawerLayout.isDrawerOpen(Gravity.START)) { drawerLayout.closeDrawer(Gravity.START); } else { AlertDialog.Builder alertDialog = new AlertDialog.Builder( MainActivity.this); alertDialog.setTitle(R.string.exit); alertDialog.setMessage(R.string.exit_ask); alertDialog.setCancelable(false); alertDialog.setPositiveButton(R.string.yes, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { finish(); } }); alertDialog.setNegativeButton(R.string.no, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { dialog.cancel(); } }); alertDialog.show(); } } private void setTabOption() { ViewPager viewPager = findViewById(R.id.viewpager); viewPager.setAdapter(new AdapterFragment(getSupportFragmentManager(), context)); TabLayout tabStrip = findViewById(R.id.tabs); tabStrip.setupWithViewPager(viewPager); } private void setupDB() { try { destPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/ielts/"; File file = new File(destPath); if (!file.exists()) { file.mkdirs(); file.createNewFile(); CopyDB(getBaseContext().getAssets().open("md_book.db"), new FileOutputStream(destPath + "/md_book.db")); } } catch (IOException e1) { e1.printStackTrace(); } } @Override protected void onResume() { super.onResume(); if (!favorite.isEmpty()){ favorite.clear(); selectFavorite(); } else if (!list.isEmpty()){ list.clear(); selectList(); } } private void CopyDB(InputStream inputStream, OutputStream outputStream) throws IOException { byte[] buffer = new byte[1024]; int length; while ((length = inputStream.read(buffer)) > 0) { outputStream.write(buffer, 0, length); } inputStream.close(); outputStream.close(); } private void selectFavorite() { database = SQLiteDatabase.openOrCreateDatabase(destPath + "/md_book.db", null); Cursor cursor = database.rawQuery("SELECT * FROM main WHERE fav = 1", null); while (cursor.moveToNext()) { String word = cursor.getString(cursor.getColumnIndex("word")); String definition = cursor.getString(cursor.getColumnIndex("definition")); String trans = cursor.getString(cursor.getColumnIndex("trans")); String img = cursor.getString(cursor.getColumnIndex("img")); int id = cursor.getInt(cursor.getColumnIndex("id")); Structure struct = new Structure(word, definition, trans, img, id); struct.setWord(word); struct.setDefinition(definition); struct.setTrans(trans); struct.setImg(img); struct.setId(id); favorite.add(struct); } } private void selectList() { database = SQLiteDatabase.openOrCreateDatabase(destPath + "/md_book.db", null); Cursor cursor = database.rawQuery("SELECT * FROM main", null); while (cursor.moveToNext()) { String word = cursor.getString(cursor.getColumnIndex("word")); String definition = cursor.getString(cursor.getColumnIndex("definition")); String trans = cursor.getString(cursor.getColumnIndex("trans")); String img = cursor.getString(cursor.getColumnIndex("img")); int id = cursor.getInt(cursor.getColumnIndex("id")); Structure struct = new Structure(word, definition, trans, img, id); struct.setWord(word); struct.setDefinition(definition); struct.setTrans(trans); struct.setImg(img); struct.setId(id); list.add(struct); } } }  
    • توسط jonoob
      سلام وقت بخیر 
      من یک آپ میخواهم طراحی کنم که کاربر بتونه ساولش را بپرسه و کاربران جواب بدن و بتونن آن را لایک کنن .
      پنج قسمت داره
      مثلا = ریاضی - علوم - فارسی - قران-شیمی
      روی ریاضی کلیک کنه وارد اون بخش بشه تمام سوالات مطرح شده را ببینه بتونه روش کلیک کنه و جوابها را ببینه و بتونه لایک 
      و
      خودش بتونه سوال طرح کنه
       
       
      لطفا منو راهنمایی کنید
      ممنونم

  • دوره آموزشی اندروید آموزش ویدئویی اندروید آموزش برنامه نویسی اندروید اندروید کاپ دوره آنلاین اندروید کتاب های آموزشی اندروید بسته آموزشی اندروید دوره برنامه نویسی اندروید آموزش Kotlin آموزش برنامه نویسی ios مهارت های فروش
    آموزش برنامه نویسی اندروید
  • فایل