{SOLVED} Error Unknown Url Scheme in Android Webview
{SOLVED} Error Unknown Url Scheme in Android Webview
Today in this post, we will solve an error when we try to open a url in webview which wants to open a specific app. For Eg. when we open instagram.com in our android webview, there's a button of open in app, when we click on that button it will show us an error of unknown url scheme. we will solve this error in this post.
To create a full WebView click here
- There are two methods of shouldoverrideurlloading in android webview webclient.
- We will use the method which has webresourcerequest and Webview arguments.
- shouldoverriddeurlloading method is called when we click on a button or Url in android webview
- We will start activity intent on a button click
- When url starts with intent:// , whatsapp:// etc. we should have handle clicking that url
- We can put conditions of checking url with these keywords or start url without conditions.
Java code with full webclient, see that method carefully
mywebview.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
progressbar.setVisibility(View.VISIBLE);
tooltext.setText(mywebview.getUrl());
invalidateOptionsMenu();
final String Urls = url;
if (Urls.contains("mailto:") || Urls.contains("sms:") || Urls.contains("tel:")) {
mywebview.stopLoading();
Intent i = new Intent();
i.setAction(Intent.ACTION_VIEW);
i.setData(Uri.parse(Urls));
startActivity(i);
}
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
progressbar.setVisibility(View.GONE);
invalidateOptionsMenu();
addhistory();
tooltext.setText(mywebview.getUrl());
super.onPageFinished(view, url);
}
//This code is used to handle url scheme. See the method carefully
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
mywebview.loadUrl(String.valueOf(request.getUrl()));
//if you want to open a specific activity from webview
if( String.valueOf(request.getUrl()).startsWith("whatsapp://"))
{
mywebview.stopLoading();
try {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.setPackage("com.whatsapp");
intent.putExtra(Intent.EXTRA_TEXT,mywebview.getUrl());
startActivity(intent);
}
catch(Exception e){
}
}
//if you want to open an activity chooser
// our url scheme starts with intent, if app found then it opens that, otherwise it catch exception only
try {
Intent intent = Intent.parseUri(String.valueOf(request.getUrl()),Intent.URI_INTENT_SCHEME);
startActivity(intent);
//This works when you open any app, but if you open specific app then
}
catch(Exception e)
{
}
return true;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.d("TAG", "shouldOverrideUrlLoading: 3");
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity( intent );
return true;
}
});
Subscribe to Harpreet studio on Youtube
Like Harpreet Studio on Facebook
Follow me on Instagram
No comments