我有一个Android应用程序,它几乎是一个包含移动网站的WebView。我对网站代码的控制最小,但可以注入javascript。
该网站包含PDF,DOC,ZIP等文件的下载链接,其中大多数只有在用户登录时才可访问。首先,我只是让应用程序打开包含“FileHandler.axd”的链接(该脚本为在普通浏览器中处理文件),但如果用户没有通过应用程序和浏览器登录,他们就会收到错误。
所以现在我正在尝试让应用程序使用下载管理器,如果链接被点击但是我遇到了一些麻烦,因为它根本不起作用。我没有很多开发Android应用程序的经验,因此任何关于我做错的导致都会非常感激。
这些是我的权限:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
我在下面添加了一个“DOWNLOAD MANAGER CODE BELOW”注释块,标记了我最后添加的代码。
这是我的MainActivity.java的一部分:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.activity_main_webview);
if(CheckNetwork.isInternetAvailable(MainActivity.this)) {
// Enable Javascript
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
// Get current UserAgent
String curua = mWebView.getSettings().getUserAgentString();
// Add -comapp string to useragent for detection
mWebView.getSettings().setUserAgentString(curua + "-comapp");
// Use remote resource
mWebView.loadUrl("https://www.onsplatform.tv/comapp");
// Stop local links and redirects from opening in browser instead of WebView
mWebView.setWebViewClient(new MyAppWebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
//hide loading image
findViewById(R.id.imageLoading1).setVisibility(View.GONE);
}
});
/////////////////////////////////
// DOWNLOAD MANAGER CODE BELOW //
/////////////////////////////////
if(mWebView.getUrl().contains("FileHandler.axd")){
String url = mWebView.getUrl();
DownloadManager.Request request = new DownloadManager.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);
}
} else {
//no connection
Toast toast = Toast.makeText(MainActivity.this, "geen internet / no internet", Toast.LENGTH_LONG);
toast.show();
}
}
我感觉我把代码放在了错误的地方。我猜我需要public method
WebViewClient
?但是哪一个onLoadResource()
?我一直在阅读文档,但我真的不知道我是否正在寻找合适的东西。
我猜测链接加载时会触发一种事件处理程序,可能是拦截它,启动该URL的下载管理器并阻止在webview中加载URL?
我有一个扩展WebViewClient的类,我猜这将是一个地方:
public class MyAppWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (Uri.parse(url).getHost().endsWith("onsplatform.tv")) { // && !url.toLowerCase().contains("filehandler")) {
return false;
}
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
view.getContext().startActivity(intent);
return true;
}
}