How to Fix Unknown URL Scheme in Android WebView

Fix err_unknown_url_scheme intent:// etc Android WebView

This error is appeared because the WebView can’t recognize the URL Scheme,

for example, the WebView will usually recognize http and https, anything other than these, for example – intent://,market://,app://,mail:// etc will not be recognized by webview unless we add a handler to handle these url schemes or by disabling these schemes and only load http and https schemes.




What are URL schemes in android?

 

The url schemes like intent://,market://,app://,mail:// etc are special URL schemes in the webview that can be used to open apps, invoke an android activity or do an action etc, for example, the mail:// url scheme can be used to send email action directly from the webview

Another example is market://, this can be used to open google playstore action from the webview, another example is whatsapp://, this can be used to directly share a text or link from webview to whatsapp messenger.

If we do not set actions whenever the special url schemes are loaded, it will show the unknown url scheme error.

It is possible to stop showing the error screen with a few lines of code

 

How to Disable the Url Scheme Error Screen in Android

 

We can totally disable the error by writing a few lines of code in the onPageFinished and ShouldOverrideUrlLoading

but the problem here is that webview will not handle the schemes, so if you need open the mail app, the mail:// will not work, only https and http links will be handled by webview

 

Here is how to disable other url schemes and allow only http and https

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    String url = "http://www.google.com";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.webactivity);


        final WebView webview = (WebView) findViewById(R.id.web1);
        webview.loadUrl(url);

        webview.setWebViewClient(new WebViewClient(){

        @Override
        public boolean shouldOverrideUrlLoading(WebView view, String url) {
            view.loadUrl(url);

            if (url.startsWith("http") || url.startsWith("https")) {
                return true;
            }else {
                webview.stopLoading();
                webview.goBack();
                Toast.makeText(MainActivity.this, "Unknown Link, unable to handle", Toast.LENGTH_SHORT).show();
            }
            return false;



}});}}

 

 

 

How to set actions for these special url schemes

 

You can set actions to any of the url schemes with the onPageFinished  method in the webview

Here is an example

The code here is executed if the clicked url in the webview starts with whatsapp://,  if whatsapp is already installed, then the webview will attempt to share the current page link to whatsapp, if whatsapp is not installed, it will show a toast message

@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);

                if (url.startsWith("whatsapp://")) {
                    webview.stopLoading();
                    try {
                        Intent whatsappIntent = new Intent(Intent.ACTION_SEND);
                        whatsappIntent.setType("text/plain");
                        whatsappIntent.setPackage("com.whatsapp");

                        whatsappIntent.putExtra(Intent.EXTRA_TEXT, webview.getUrl() + "  - Shared from webview ");

                        startActivity(whatsappIntent);
                    } catch (android.content.ActivityNotFoundException ex) {

                        String MakeShortText = "Whatsapp have not been installed";

                        Toast.makeText(WebactivityTab1.this, MakeShortText, Toast.LENGTH_SHORT).show();
                    }


                }
                ;

            }});

 

 

Another examples

 

Here is an example to fix the common intent url scheme , we will learn how to handle the intent:// here , i noticed this error when i built an app that loads facebook messages, the error appeared whenever i tap on the message icon of facebook. i suppose this is because the facebook is sending you to app store to download the messenger app when you tap on the message icon. in the below code, we will fix it.

The Code to Fix err_unknown_url_scheme intent://

 

webview.setWebViewClient(new WebViewClient() {
           String currentUrl;

           @Override
           public boolean shouldOverrideUrlLoading(WebView view, String url) {
               currentUrl = url;

               if (url.startsWith("http") || url.startsWith("https")) {
                   return false;
               }
               if (url.startsWith("intent")) {




                 try {
                     Intent intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME);

                     String fallbackUrl = intent.getStringExtra("browser_fallback_url");
                   if (fallbackUrl != null) {
                       webview.loadUrl(fallbackUrl);
                       return true;
                   }}

               catch (URISyntaxException e) {
                   //not an intent uri
               }
       return true;//do nothing in other cases

 

What we did in this code is whenever the url we clicked contain intent:// scheme, we try to override it and get the fallbackUrl to the string, then we try to load the url. this should fix the intent error




 

You can set your own scheme handler for your apps from these examples

, , , ,

Post navigation

6 thoughts on “How to Fix Unknown URL Scheme in Android WebView

          1. where to add this code ?? I added in MainActivity but it is nor working.. and can i publish webview app in playstore? my website shows adsense ads, and i read somewhere adsense in webview app in not allow in playstore it is against admob policy ???

          2. You can add in main activity, yes, according to google’s rule, you are not allowed to show webview of a website you don’t own or don’t have permission. if you own the website, it is ok, but do not place admob ads in your app if your website has adsense. adsense+admob= ban or app disable

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.