2011-12-07 7 views
2

これは、解決しなければならない実際の問題よりも、好奇心のために質問されています。私はWebViewを含むAndroidアプリを作った。リンクをクリックするとWebViewで開かれるように、URLオーバーライド方法を使用しました。Android WebViewにファイルをダウンロードする(コードでダウンロードイベントまたはHTTPClientを使用しない)

その後、ファイルがサーバーからユーザーデバイスにダウンロードされることに決めました。残念ながら私は前にsetDownloadListenerメソッドを見ていませんでした。ユーザーがリンクをクリックすると、ダウンロードは開始されません。

私が知る限り、適切なコード、つまりダウンロードリスナーまたはHttpClientでアプリを更新する必要がありますが、これは問題ありません。

(私は馬鹿のように聞こえる危険にさらされています)私はWebViewにコードを変更せずにファイルをダウンロードさせることができるサーバーからの操作はありますか?

WebViewには、おそらくWebViewがブラウザを開いてファイルをダウンロードする理由があるようです。ちょうど私がそれを動作させるために何かを逃したかもしれないと思う。私はこれでかなり新しいです。

答えて

1

私はwebviewがtext/htmlコンテンツとマルチパートだけをダウンロードしてレンダリングすると思います。残りはあなたが見ているダウンロードクライアントに向けられます。

  • Herojit
+0

あなたはそうです。実際にはダウンロードクライアントには向いていません。私は自分自身でそのダウンロードの意図を呼び出す必要がありますが、それはhtmlをダウンロードするだけです。 –

3

あなたはWebViewのJavascripInterface経由でアンドロイドでDownloadManagerとダウンロードを発射することができるはずです。私は今までこれを成功させることなく試しています。 webviewとDownloadManagerが動作している状況に問題がある可能性があります。動作するように起こっている場合、私はいくつかのコードに戻ってくるだろう:)

UPDATE:

次のコードは、私のために非常に適しています。ファイル、.mp3ファイルとによって処理される他のすべてのリンクをの.apkするために、私はリンクを管理上のコードでは(ちょうどあなたが唯一のAndroidからDownloadManagerを使用することができますbeaware 2.3+)

myWebView.setWebViewClient(new WebViewClient() { 
     @Override 
     public void onReceivedError(WebView view, int errorCode, 
      String description, String failingUrl) { 
       Log.d("WEB_VIEW_TEST", "error code:" + errorCode + " - " + description); 
     } 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
       // handle different requests for different type of files 
       // this example handles downloads requests for .apk and .mp3 files 
       // everything else the webview can handle normally 
       if (url.endsWith(".apk")) { 
        Uri source = Uri.parse(url); 
        // Make a new request pointing to the .apk url 
        DownloadManager.Request request = new DownloadManager.Request(source); 
        // appears the same in Notification bar while downloading 
        request.setDescription("Description for the DownloadManager Bar"); 
        request.setTitle("YourApp.apk"); 
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
         request.allowScanningByMediaScanner(); 
         request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); 
        } 
        // save the file in the "Downloads" folder of SDCARD 
        request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "SmartPigs.apk"); 
        // get download service and enqueue file 
        DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); 
        manager.enqueue(request); 
       } 
       else if(url.endsWith(".mp3")) { 
        // if the link points to an .mp3 resource do something else 
       } 
       // if there is a link to anything else than .apk or .mp3 load the URL in the webview 
       else view.loadUrl(url); 
       return true;     
     } 
    }); 

:あなたのようなものを使用することができますウェブビュー(通常のHTMLページ)