Android - DownloadListener или AsyncTask - PullRequest
0 голосов
/ 29 июля 2011

я пытаюсь загрузить с веб-страницы некоторые файлы, кликая URL-адрес с веб-просмотром, обрабатывая загрузку, а не браузер

, если я использую DownloadListener, он отлично работает с одной проблемой, я не вижу индикатор выполнения

если я использую AsyncTask, я должен указать URL-адрес в коде, чтобы загрузить его, я могу просто щелкнуть URL-адрес и начать загрузку

мой вопрос: как я могу позволить AsyncTask загружать любой URL-адрес из Интернета, не сидя

downloadFile.execute («URL-адрес файла, который вы хотите загрузить»);

или как я могу создать индикатор выполнения для DownloadListener

@Override
public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    webview = (WebView) findViewById(R.id.webview);
    myProgressBar = (ProgressBar) findViewById(R.id.progressbar_Horizontal);
    new Thread(myThread).start();
    webview.setWebViewClient(new HelloWebViewClient());
    webview.getSettings().setJavaScriptEnabled(true);
    webview.setInitialScale(50); 
    webview.getSettings().setUseWideViewPort(true); 
    webview.setVerticalScrollBarEnabled(false);
    webview.setHorizontalScrollBarEnabled(false);
    webview.loadUrl("http://localhost/index.php");
    webview.setWebViewClient(new DownloadWebViewClient());
    webview.setDownloadListener(new DownloadListener() {

       @Override
       public void onDownloadStart(String url, String userAgent,
             String contentDisposition, String mimetype,
             long contentLength) {
           InputStream is;
           try {
               URL u = new URL(url);
               HttpURLConnection con = (HttpURLConnection) u.openConnection();
               con.setRequestMethod("GET");
               con.setDoOutput(true);
               con.connect();
               is = con.getInputStream();


           // Path and File where to download the APK
           String path = Environment.getExternalStorageDirectory() + "/apdroid/";
           String fileName = url.substring(url.lastIndexOf('/') + 1);
           File dir = new File(path);
           dir.mkdirs(); // creates the download directory if not exist
           File outputFile = new File(dir, fileName);
           FileOutputStream fos = new FileOutputStream(outputFile);

           // Save file from URL to download directory on external storage
           byte[] buffer = new byte[1024];
           int len = 0;
           while ((len = is.read(buffer)) != -1) {
               fos.write(buffer, 0, len);
           }
           fos.close();
           is.close();


           Intent intent = new Intent(Intent.ACTION_VIEW);
           String name = Environment.getExternalStorageDirectory() + "/apdroid/" + url.substring(url.lastIndexOf('/') + 1);
           intent.setDataAndType(Uri.fromFile(new File(name)), "application/vnd.android.package-archive");
           startActivity(intent);


       }catch (IOException e) {
           e.printStackTrace();
        }
       }
    });


 }



protected void install(String fileName) {
    // TODO Auto-generated method stub

}



private Runnable myThread = new Runnable() {

    @Override
    public void run() {
       while (myProgress < 100) {
          try {
             myHandle.sendMessage(myHandle.obtainMessage());
             Thread.sleep(1000);
          } catch (Throwable t) {
          }
       }
    }

    Handler myHandle = new Handler() {

       @Override
       public void handleMessage(Message msg) {
          myProgress++;
          myProgressBar.setProgress(myProgress);
       }

    };

 };









private class HelloWebViewClient extends WebViewClient {










@Override
public void onReceivedError(WebView view,int errorCode,String description,String failingUrl) {
   try {view.stopLoading();} catch(Exception e){}
   try {view.clearView();} catch(Exception e){}
   view.loadUrl("file:///android_asset/wifi.html");
}
    }

я просто хочу иметь ProgressBar при загрузке любого файла со своей страницы

и не могу использовать asyncTask, потому что мне нужно поместить файлы в кодне нажимая на них

1 Ответ

0 голосов
/ 29 июля 2011

Вы, вероятно, должны быть overriding the URL loading обработать и каким-то образом распознать, загружается ли какой-либо URL, ресурс которого вы хотите загрузить.
Как только вы обнаружите это, прекратите загрузку страницы и запустите AsyncTask сэтот URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...