Intereting Posts
Можно ли изменить контекст приложения во время жизненного цикла приложения? Пользовательский интерфейс планшета не работает в моем приложении Скрыть infoWindow при щелчке по маркеру второй раз (Google Maps Android API V2) Исключение безопасности только на Android 6 Android Multipart HTTP Post не отправляет MIME-тип файла Ошибка Logcat: «addView (View, LayoutParams) не поддерживается в AdapterView» в ListView Использование фильтров намерений с помощью широковещательных радиоприемников Android Можно ли создать фиксированную ширину в XML? Навигационные режимы панели действий устарели в Android L Реализация диалогового окна File в Android TV Leanback Лучший способ измерения времени выполнения в Android? Как отключить переадресацию портов adb? Ошибка Gradle после обновления до версии Android Studio 2.0 и использования Instant Run: Как удалить ключ nameValuePairs из JSONObject? Как применить динамическую альфа-маску к тексту на Android

Как загрузить файл с помощью webview? (Этот случай странный)

Я хочу загрузить файл (например .mp3) с веб-сайта с помощью webview, но проблема в том, что всякий раз, когда я нажимаю на ссылку, он откроет браузер (по умолчанию один), который появляется в течение секунды до закрытия. И файл не был загружен.

Вот мой код,

import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.webkit.WebView; import android.webkit.WebViewClient; import android.webkit.WebChromeClient; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.webkit.DownloadListener; import android.widget.Button; import android.widget.TextView; public class Main extends Activity { WebView webview; Button bt_search; TextView txt_search; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); webview = (WebView) findViewById(R.id.webView); webview.setWebChromeClient(new WebChromeClient()); webview.getSettings().setJavaScriptEnabled(true); webview.setDownloadListener(new DownloadListener() { public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) { Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); } }); txt_search = (TextView) findViewById(R.id.song); webview.loadUrl("http://www.google.com"); bt_search = (Button) findViewById(R.id.findit); bt_search.setOnClickListener(new OnClickListener() { public void onClick(View v) { String keyword = txt_search.getText().toString().trim(); if (!keyword.equals("")) { webview.loadUrl("MP3 Sites" + keyword + ".html"); } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } } 

Solutions Collecting From Web of "Как загрузить файл с помощью webview? (Этот случай странный)"

Внедрение WebViewClient для использования с вашим WebView. В этом случае переопределите метод shouldOverrideUrlLoading , где вы должны проверить, является ли это mp3-файлом, а затем передать этот URL-адрес DownloadManager или тому, что вы используете для фактической загрузки файла. Вот приблизительная идея:

  // This will handle downloading. It requires Gingerbread, though final DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE); // This is where downloaded files will be written, using the package name isn't required // but it's a good way to communicate who owns the directory final File destinationDir = new File (Environment.getExternalStorageDirectory(), getPackageName()); if (!destinationDir.exists()) { destinationDir.mkdir(); // Don't forget to make the directory if it's not there } webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading (WebView view, String url) { boolean shouldOverride = false; // We only want to handle requests for mp3 files, everything else the webview // can handle normally if (url.endsWith(".mp3")) { shouldOverride = true; Uri source = Uri.parse(url); // Make a new request pointing to the mp3 url DownloadManager.Request request = new DownloadManager.Request(source); // Use the same file name for the destination File destinationFile = new File (destinationDir, source.getLastPathSegment()); request.setDestinationUri(Uri.fromFile(destinationFile)); // Add it to the manager manager.enqueue(request); } return shouldOverride; } }); 
 if(mWebview.getUrl().contains(".mp3") { Request request = new Request( Uri.parse(url)); request.allowScanningByMediaScanner(); request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "download"); // You can change the name of the downloads, by changing "download" to everything you want, such as the mWebview title... DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE); dm.enqueue(request); }