davod56

دانلود فایل از اینترنت و نمایش در برنامه ی اندروید

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

سلام

لطفا اساتید راهنمایی کنند...

من از کد زیر برای دانلود فایل mp3 استفاده می کنم و مشکلی که دارم این هست که برنامه در شبیه ساز درست کار می کنه ولی در گوشی (اندروید 6) درست کار نمی کنه!!! یعنی نه پوشه ای می سازه و نه فایل رو دانلود می کنه...

اینم کدی که استفاده می کنم....

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.widget.TextView;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class test extends Activity {

   public static final String LOG_TAG = "Android Downloader by The Code Of A Ninja";

   //initialize our progress dialog/bar
   private ProgressDialog mProgressDialog;
   public static final int DIALOG_DOWNLOAD_PROGRESS = 0;

   //initialize root directory
   File rootDir = Environment.getExternalStorageDirectory();

   //defining file name and url
   public String fileName = "097_ghadr.mp3";
   public String fileURL = "http://gmi.zgig.in/download/097_ghadr.mp3";

   @Override
   public void onCreate(Bundle savedInstanceState)
   {
       super.onCreate(savedInstanceState);
       //setting some display
       setContentView(R.layout.test);
       TextView tv = new TextView(this);
       tv.setText("Android Download File With Progress Bar");

       //making sure the download directory exists
       checkAndCreateDirectory("/my_downloads");

       //executing the asynctask
       new DownloadFileAsync().execute(fileURL);
   }

   //this is our download file asynctask
   class DownloadFileAsync extends AsyncTask {

       @Override
       protected void onPreExecute() {
           super.onPreExecute();
           showDialog(DIALOG_DOWNLOAD_PROGRESS);
       }


       @Override
       protected String doInBackground(String... aurl) {

           try {
               //connecting to url
               URL u = new URL(fileURL);
               HttpURLConnection c = (HttpURLConnection) u.openConnection();
               c.setRequestMethod("GET");
               c.setDoOutput(true);
               c.connect();

               //lenghtOfFile is used for calculating download progress
               int lenghtOfFile = c.getContentLength();

               //this is where the file will be seen after the download
               FileOutputStream f = new FileOutputStream(new File(rootDir + "/my_downloads/", fileName));
               //file input is from the url
               InputStream in = c.getInputStream();

               //here’s the download code
               byte[] buffer = new byte[1024];
               int len1 = 0;
               long total = 0;

               while ((len1 = in.read(buffer)) > 0) {
                   total += len1; //total = total + len1
                   publishProgress(""+ (int)((total*100)/lenghtOfFile));
                   f.write(buffer, 0, len1);
               }
               f.close();

           } catch (Exception e) {
               Log.d(LOG_TAG, e.getMessage());
           }

           return null;
       }

       protected void onProgressUpdate(String... progress) {
           Log.d(LOG_TAG,progress[0]);
           mProgressDialog.setProgress(Integer.parseInt(progress[0]));
       }

       @Override
       protected void onPostExecute(String unused) {
           //dismiss the dialog after the file was downloaded
           dismissDialog(DIALOG_DOWNLOAD_PROGRESS);
       }
   }

   //function to verify if directory exists
   public void checkAndCreateDirectory(String dirName){
       File new_dir = new File( rootDir + dirName );
       if( !new_dir.exists() ){
           new_dir.mkdirs();
       }
   }

   //our progress bar settings
   @Override
   protected Dialog onCreateDialog(int id) {
       switch (id) {
           case DIALOG_DOWNLOAD_PROGRESS: //we set this to 0
               mProgressDialog = new ProgressDialog(this);
               mProgressDialog.setMessage("Downloading file...");
               mProgressDialog.setIndeterminate(false);
               mProgressDialog.setMax(100);
               mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
               mProgressDialog.setCancelable(true);
               mProgressDialog.show();
               return mProgressDialog;
           default:
               return null;
       }
   }
}

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


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

Environment.getExternalStorageDirectory();

قبلا که همچین پروژه ای داشتم خوندم که برای اندروید 6 به بعد مسیر ذخیره فایل عوض شده و شما باید در پوشه android و زیرپوشه فولدر پکیج برنامه تان قرار بگیرد.

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

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


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

ممنونممشکلی که هست همینه که

 اولا اصلا فولدر پکیچ ساخته نمیشه

دوما فایل دانلود نمیشه... یعنی progressbar میاد و حدودا 10 بیست ثانیه هست ولی پر نمی شه و بعد هم میره...

اگه می شه بیشتر راهنمایی کنید...

در اندروید 6 راه حلش چیه؟ اگه می شه کدی که باید عوض بشه یا کامل بشه رو مشخص کنید...

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


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

از نسخه ۶ به بعد باید مجوز دسترسی در حال اجرا رو به برنامه بدی که جواب بده,  مثل تلگرام که وقتی میخوایی واسه بار اول عکس بفرستی مجوز دسترسی به فایل ها رو ازت میخواد

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


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

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

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

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

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


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

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

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


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