Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android WebView "tel:" links show web page not found

I am trying to get my android webview app to open tel: links to the phone. Every time I open up a telephone link it works great and opens up the phone. However once I am done with my call and go back to the app it is at a page that says "Web Page Not Found tel:0000000000". Then I have to hit the back button once more to get to the page that I clicked the telephone number on.

Is there a way to get it to open the TEL link without trying to find the page in webview as well as opening it up on the phone?

This is code I am using in WebView to override its handling of the TEL and Mailto links:

        public boolean shouldOverrideUrlLoading(WebView view, String url) {         if (url.startsWith("mailto:") || url.startsWith("tel:")) {                  Intent intent = new Intent(Intent.ACTION_VIEW,                         Uri.parse(url));                  startActivity(intent);                  }          view.loadUrl(url);         return true;         } 

Any help would be appreciated. I have spent the last 2 hours scouring goodle and have failed to produce any answers.

like image 407
Jeff Thomas Avatar asked Dec 02 '10 18:12

Jeff Thomas


People also ask

How do I display HTML content in WebView?

Step 1 − Create a new project in Android Studio, go to File ⇒ New Project and fill all required details to create a new project. Step 2 − Add the following code to res/layout/activity_main. xml. In the above code, we have taken web view to show html content.

How do I enable JavaScript on Android WebView?

JavaScript is disabled in a WebView by default. You can enable it through the WebSettings attached to your WebView . You can retrieve WebSettings with getSettings() , then enable JavaScript with setJavaScriptEnabled() . WebView myWebView = (WebView) findViewById(R.

How do I open a link in WebView?

Within the shouldOverrideUrlLoading() method simply get the URL from the request and pass into the Intent. See the full example.

How do I view web pages on Android?

String url = "http://www.example.com"; Intent i = new Intent(Intent. ACTION_VIEW); i. setData(Uri. parse(url)); startActivity(i);


2 Answers

OK so I solved the issue I think. I just needed to separate the URL overrides as follows:

public boolean shouldOverrideUrlLoading(WebView view, String url) {     if (url.startsWith("tel:")) {          Intent intent = new Intent(Intent.ACTION_DIAL, Uri.parse(url));          startActivity(intent);         view.reload();         return true;     }      view.loadUrl(url);     return true; } 

Now my regular links work as well as the tel links. I can also add in there for geo: links if I need to and it will not give me the issue that I was having before to open up maps on the phone.

like image 131
Jeff Thomas Avatar answered Sep 21 '22 15:09

Jeff Thomas


Rather than call loadUrl(url), just return false for the URLs that should not be overridden:

public boolean shouldOverrideUrlLoading(WebView view, String url) {     if( URLUtil.isNetworkUrl(url) ) {         return false;     }      // Otherwise allow the OS to handle it     Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));     startActivity( intent );      return true; } 

I've found VIEWing tel: works as expected on all phones we've tried it with. No need to special-case it because of the DIAL action.

I've noticed YouTube videos and the like don't work in WebViews, so you may want to detect those as well.

The whole process could probably be generalized for all sorts of URIs by querying the PackageManager for Activities that handle your URI that are also not the embedded browser. That might be overkill and get confused by other installed browsers.

like image 41
Anm Avatar answered Sep 24 '22 15:09

Anm