-1

Я получил свое приложение для загрузки контента с веб-сайта, но намерение предлагает вам открыть ссылку в браузере и загрузить ее оттуда. Я хочу изменить это, поэтому, когда я нажимаю кнопку загрузки, вместо намерения, направляемого в браузер, он открывает всплывающее окно в моем приложении и показывает ход загрузки.Как показать прогресс загрузки в приложении

Как я могу это достичь? Я искал вокруг stackoverflow и нашел только способы, которые не работают для меня. Вот мой код -

txtLink = (EditText) findViewById(R.id.input_package); 
btnOpenLink = (ImageButton) findViewById(R.id.download); 
btnOpenLink.setOnClickListener(new OnClickListener() { 

    public void onClick(View v) { 
     String page = txtLink.getText().toString(); 
     if (!TextUtils.isEmpty(page)) { 
      Uri uri = Uri.parse(defaultLink + page); 

      // Success Toast 
      LayoutInflater inflater = getLayoutInflater(); 
      // Inflate the Layout 
      View layout = inflater.inflate(R.layout.custom_toast, null); 
      TextView text = (TextView) layout.findViewById(R.id.textToShow); 
      // Set the Text to show in TextView 
      text.setText("Your download should start shortly"); 
      Toast toast = new Toast(getApplicationContext()); 
      toast.setGravity(Gravity.FILL_HORIZONTAL, 0, 0); 
      toast.setDuration(Toast.LENGTH_LONG); 
      toast.setView(layout); 
      toast.show(); 
      Intent intent = new Intent(Intent.ACTION_VIEW, uri); 
      startActivity(intent); 
     } else { 

      // Fail Toast 
      LayoutInflater inflater = getLayoutInflater(); 
      // Inflate the Layout 
      View layout = inflater.inflate(R.layout.custom_toast, null); 
      TextView text = (TextView) layout.findViewById(R.id.textToShow); 
      // Set the Text to show in TextView 
      text.setText("Please enter a package name"); 
      Toast toast = new Toast(getApplicationContext()); 
      toast.setGravity(Gravity.FILL_HORIZONTAL, 0, 0); 
      toast.setDuration(Toast.LENGTH_LONG); 
      toast.setView(layout); 
      toast.show(); 

     } 
    } 
}); 

Может ли кто-нибудь объяснить, что является лучшим способом для создания всплывающего процесса загрузки? Потому что у меня есть поле ввода, где можно ввести вторую часть URL-адреса, и он загружает это. Eg- download.com/, но пользователь вводит «загрузку», поэтому, когда он нажимает кнопку, она переходит на download.com/download и загружается с этого URL-адреса.

Благодаря

+0

1. you ca n всегда использует DownloadManager (особенно для больших файлов). 2. Если нет, то какой-либо http-клиент (Apache, URLConnection и т. д.). 3. для каждого клиента-клиента есть приятные примеры, как сделать это через Интернет ... так, другими словами : do more reaserch – Selvin

+0

Вы должны создать 'AlertDialog' в новой' Деятельности' и открыть это действие 'onClick' этой ссылки для скачивания и не забудьте закончить эти несколько строк на кнопке Positive' AlertDialog' 'Intent i = новый Намерение (\t \t \t \t \t \t \t \t \t \t \t Intent.ACTION_VIEW) \t \t \t \t \t \t \t \t \t \t \t \t .setFlags (Intent.FLAG_ACTIVITY_NEW_TASK); \t \t \t \t \t \t \t \t \t \t i.setData (Uri.parse (URL_LINK)); \t \t \t \t \t \t \t \t \t \t startActivity (я); finish(); ' –

+0

Спасибо за ответ, я сделаю больше исследований в этом. – LoopyLoo

ответ

0

Вы можете сделать что-то вроде этого ..

public static final int DIALOG_DOWNLOAD_PROGRESS = 0; 
private ProgressDialog mProgressDialog; 

@Override 
protected Dialog onCreateDialog(int id) { 
switch (id) { 
case DIALOG_DOWNLOAD_PROGRESS: 
    mProgressDialog = new ProgressDialog(this); 
    mProgressDialog.setMessage("waiting 5 minutes.."); 
    mProgressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
    mProgressDialog.setCancelable(false); 
    mProgressDialog.show(); 
    return mProgressDialog; 
default: 
return null; 
    } 
} 

Затем написать задачу асинхронной обновить прогресс ..

private class DownloadZipFileTask extends AsyncTask<String, String, String> { 

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

@Override 
protected String doInBackground(String... urls) { 
    //Copy you logic to calculate progress and call 
    publishProgress("" + progress); 
} 

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

@Override 
protected void onPostExecute(String result) {   
    dismissDialog(DIALOG_DOWNLOAD_PROGRESS); 
} 
} 

Напишите скачать логику по методу doInBackground из Asynctask.This должен решить вашу цель, и он даже не блокирует прорезь UI.