Я строю свое первое приложение для Android и у меня возникла проблема. По сути, я пытаюсь перенести мою страницу Youtube 2 Mp3, встроенную в PHP, в мобильное приложение. Я успешно сделал это, но проблема, с которой я столкнулся, заключается в том, что после конвертации в mp3 я не могу скачать mp3-файл по ссылке, напечатанной на странице, из приложения для Android. Он отлично работает прямо с веб-страницы и работает нормально, если приложение загружает ссылку в браузере Android по умолчанию (Chrome), но не работает, когда приложение загружает ссылку в WebView.
ФАЙЛ: MainActivity.java
public class MainActivity extends AppCompatActivity {
WebView web;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
web = (WebView) findViewById(R.id.webView);
web.setWebViewClient(new myWebClient());
web.getSettings().setJavaScriptEnabled(true);
web.loadUrl("http://www.bigjohn863.com/youtubetomp3/index.php");
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
.setAction("Action", null).show();
}
});
}
public class myWebClient extends WebViewClient
{
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return false;
}
}
СТРАНИЦА ИНТЕРНЕТА: http://www.bigjohn863.com/youtubetomp3/index.php
Веб-страница работает, как и ожидалось, при загрузке в обычном браузере и работает нормально, если я использую ее в браузере Android по умолчанию (Chrome), но если я изменяю код для загрузки только нажатых ссылок в веб-просмотре, то когда я нажимаю на ссылку, она ничего не делает.
Попробуйте добавить это к вашей функции shouldOverrideUrlLoading(WebView view, String url)
после подтверждения url
, Начнется загрузка, аналогичная загрузке с любой веб-страницы.
if (url.endsWith(".mp3")) {
Uri source = Uri.parse(url);
// Make a new request pointing to the .mp3 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("YourMp3.mp3");
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, "MyMp3.mp3");
// get download service and enqueue file
DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
manager.enqueue(request);
}
<a href="<?php echo $_SERVER['PHP_SELF']; ?>?mp3=' + encodeURI(songFile) + '">Download your MP3 file</a>
Этот код явно не будет работать в веб-представлении Android, поскольку он содержит код PHP, а PHP-код — это код на стороне сервера, а веб-представление Android может выполнять только код на стороне клиента.
Если вы хотите запустить его, то получите данные с сервера в виде URL-адреса и поместите их в тег привязки, или вы можете попробовать, поместив полный URL-адрес жесткого кода внутри тега привязки.