Android Launch Browser from App to handle external URLs
Upon googling for this one, I found some good relevant links on stack overflow as well as the android webview documentation, but no singular solution that tied everything together.
First, I created a custom WebViewClient class. Note that this is optional as you can do inline class declarations in this environment.
package com.example.testapp; import android.app.Activity; import android.content.Context; import android.net.Uri; import android.webkit.WebView; import android.webkit.WebViewClient; import android.content.Intent; public class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { if (url != null && url.startsWith('http://192.168.1.101')) { return false; } else { view.getContext().startActivity( new Intent(Intent.ACTION_VIEW, Uri.parse(url))); return true; } } }
Then, in the main activity, use code within onCreate to support for multiple windows and to set the web view client to your own custom client.
package com.example.testapp; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.Menu; import android.webkit.WebView; import android.webkit.WebViewClient; import android.view.KeyEvent; import android.webkit.WebChromeClient; import android.net.Uri; public class MainActivity extends Activity { private WebView webView; @Override public void onCreate(Bundle savedInstanceState) { final Context context = this; super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = (WebView) findViewById(R.id.webView1); webView.getSettings().setJavaScriptEnabled(true); webView.getSettings().setSupportMultipleWindows(true); webView.setWebViewClient(new MyWebViewClient()); webView.loadUrl('http://192.168.1.1/login.aspx'); }
If you want to use an inline class declaration instead of defining a seperate mywebviewclient class, you can also use something like:
webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { //etc, same code as above } });
If you have not already addressed the question of handling the android back button within your webview, the android documentation has a good quick simple code reference on how to accomplish this.
Enjoy. 🙂
References
StackOverflow, http://stackoverflow.com/questions/5979361/android-open-url-in-a-new-window-without-leaving-app
StackOverflow, http://stackoverflow.com/questions/7028258/launch-browser-from-within-app-how-do-you-get-back-to-the-app
Android Documentation, http://developer.android.com/reference/android/webkit/WebView.html
Posted on October 10, 2012, in Programming & Development and tagged android, browser, code, dev, development, eclipse, external site, external url, java, launch, launch browser, launch chrome, mobile, not working, open new window, program, programming, target blank, url. Bookmark the permalink. 1 Comment.
You made my day!