Android Webview Error ERR_UNKNOWN_URL_SCHEME

When I click the link that goes to mailto: admin@ikiyuzoniki.net. I get this error:

net: ERR_UNKNOWN_URL_SCHEME

I tried to add the condition if(url.startsWith("mailto:")) , but it does not work.

This is my MyWebViewClient method:

 public class MyWebViewClient extends WebViewClient { @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { } @Override public void onPageFinished(WebView view, String url) { view.setVisibility(View.VISIBLE); final Animation fade = new AlphaAnimation(0.0f, 1.0f); fade.setDuration(200); view.startAnimation(fade); view.setVisibility(View.VISIBLE); } } public boolean shouldOverrideUrlLoading(WebView view, String url) { if(url.startsWith("mailto:")){ Intent intent = null; try { intent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME); } catch (URISyntaxException e) { e.printStackTrace(); } view.getContext().startActivity(intent); } else if (url.endsWith(".mp3")) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse(url), "audio/*"); startActivity(intent); } else if (url.endsWith(".mp4") || url.endsWith(".3gp")) { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse(url), "video/*"); startActivity(intent); } else { return false; } view.reload(); return true; } 

and so I add a function to my web view before loadUrl :

 ... mWebview.setWebViewClient(new MyWebViewClient()); ... 
+5
source share
3 answers

try it

 if(url.startsWith("mailto:")){ MailTo mt = MailTo.parse(url); Intent i = new Intent(Intent.ACTION_SEND); i.setType("text/plain"); i.putExtra(Intent.EXTRA_EMAIL, new String[]{mt.getTo()}); i.putExtra(Intent.EXTRA_SUBJECT, mt.getSubject()); i.putExtra(Intent.EXTRA_CC, mt.getCc()); i.putExtra(Intent.EXTRA_TEXT, mt.getBody()); mContext.startActivity(i); view.reload(); return true; } 
+7
source

err_unknown_url_scheme android problems webview resolved - this works for me ... Their HTML web page also deals with bodies, mailto, sms and geo.

webview.setWebViewClient(new MyWebViewClient());

  webview.loadUrl("file:///android_asset/demo.html"); } class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if( URLUtil.isNetworkUrl(url) ) { return false; } try { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(url)); startActivity(intent); }catch(ActivityNotFoundException e) { Log.e("AndroiRide",e.toString()); Toast.makeText(MainActivity.this,"No activity found",Toast.LENGTH_LONG).show(); } return true; } @RequiresApi(Build.VERSION_CODES.N) @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { String url=request.getUrl().toString(); if( URLUtil.isNetworkUrl(url) ) { return false; } try { Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(Uri.parse(url)); startActivity(intent); }catch(ActivityNotFoundException e) { Log.e("AndroiRide",e.toString()); Toast.makeText(MainActivity.this,"No activity found",Toast.LENGTH_LONG).show(); } return true; } } 

} "

+1
source

This error occurs because WebView cannot recognize the URL scheme, for example, WebView usually recognizes http and https, anything but these, for example - intent: //, market: //, app: //, mail: // etc will not be recognized by the web view until we add a handler to process these URL schemes or disable these schemes and only load the http and https schemes.

Here is an example to fix a general purpose URL scheme.

 mWebView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { return loadUrl(view, url); } @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); } @Override public void onReceivedError(WebView view, int errorCode, String description,String failingUrl) { super.onReceivedError(view, errorCode, description, failingUrl); //Log.d("Web Request Error", ""); showError(errorCode); } @TargetApi(Build.VERSION_CODES.M) @Override public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { super.onReceivedError(view, request, error); Log.d("WebResource error", ""); int errorCode = error.getErrorCode(); showError(errorCode); } }); private boolean loadUrl(WebView view, String url) { if (url.startsWith("http:") || url.startsWith("https:")) { view.loadUrl(url); return false; } // Otherwise allow the OS to handle it else if (url.startsWith("tel:")) { Intent tel = new Intent(Intent.ACTION_DIAL, Uri.parse(url)); startActivity(tel); return true; } else if (url.toLowerCase().startsWith("mailto:")) { MailTo mt = MailTo.parse(url); Intent emailIntent = newEmailIntent(mt.getTo(), mt.getSubject(), mt.getBody(), mt.getCc()); startActivity(emailIntent); return true; } return true; } 
+1
source

Source: https://habr.com/ru/post/1262918/


All Articles