Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Webview is not opening links of different domains in chrome Android

I am trying to make an app for my company's web application and it works well. Only problem is that I have some links that are from different domains, like Youtube, which opens some videos. All other links related to the domain specified as my domain will open in the Webview and display the website in my app. But the Youtube link and other external website links don't work.

If I recall, it should ask the user if he wants to open it using Chrome or Youtube or the Facebook app based on the link but it doesn't work.

Here is my WebView code:

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        final WebView myWebView = (WebView) findViewById(R.id.webview);
        myWebView.loadUrl("http://www.example.com/");

        WebSettings webSettings = myWebView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
        myWebView.getSettings().setSupportMultipleWindows(true);
        myWebView.setHorizontalScrollBarEnabled(true);
        myWebView.getSettings().setDomStorageEnabled(true); // This will allow access

        myWebView.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (Uri.parse(url).getHost().startsWith("google.com")) {
                    view.loadUrl(url);
                } else {

                    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                    startActivity(intent);

                }
                return true;
            }
        });
        myWebView.setDownloadListener(new DownloadListener() {

            public void onDownloadStart(String url, String userAgent,
                                        String contentDisposition, String mimetype,
                                        long contentLength) {
                DownloadManager.Request request = new DownloadManager.Request(
                        Uri.parse(url));
                final String filename = URLUtil.guessFileName(url, contentDisposition, mimetype);
                request.allowScanningByMediaScanner();
                request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED); //Notify client once download is completed!
                request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, filename);
                DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
                dm.enqueue(request);
                Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT); //This is important!
                intent.addCategory(Intent.CATEGORY_OPENABLE); //CATEGORY.OPENABLE
                intent.setType("*/*");//any application,any extension
                Toast.makeText(getApplicationContext(), "Downloading File", //To notify the Client that the file is being downloaded
                        Toast.LENGTH_LONG).show();

            }
        });
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // Check if the key event was the Back button and if there's history
        WebView myWebView = (WebView) findViewById(R.id.webview);
        if ((keyCode == KeyEvent.KEYCODE_BACK) && myWebView.canGoBack()) {
            myWebView.goBack();
            return true;
        }
        // If it wasn't the Back key or there's no web page history, bubble up to the default
        // system behavior (probably exit the activity)
        return super.onKeyDown(keyCode, event);
    }
}

I have tried everything but it doesn't open links from different domains in the web browser. What is wrong?

like image 900
Varun K Nair Avatar asked Nov 08 '22 05:11

Varun K Nair


1 Answers

Maybe you can try this in the shouldOverrideUrlLoading method to check if its company domain, it should open in the webView by this way. It has worked for me.

 public boolean shouldOverrideUrlLoading(WebView webView, String url) {
    if(url.indexOf("yourcompanydomain.com") > -1 ) return false;

    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    activity.startActivity(intent);
    return true;
}

or try

if(myWebView.getUrl().startsWith("yourcompanydomain.com")){
                return false ;
}
else
{
Intent....
}
like image 136
user5434084 Avatar answered Nov 14 '22 21:11

user5434084