当网址包含x

时间:2018-01-12 13:17:38

标签: java android android-webview android-download-manager

我有一个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;
    }
}

0 个答案:

没有答案