I have a view and view the site has malito code to send email.
When I open the link opens in an error.
I want that when I open the link opens Gmail app or another email application.
Thanks to all helpers.
public class teacher extends Activity implements OnClickListener {
WebView webView;
final Activity activity = this;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getWindow().requestFeature(Window.FEATURE_PROGRESS);
setContentView(R.layout.teacher);
webView = (WebView) findViewById(R.id.webView145);
webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl("https://dl.dropboxusercontent.com/u/233211/%D7%A8%D7%A9%D7%99%D7%95%D7%9F/iWebKit%20demo/ther.html");
webView.setWebChromeClient(new WebChromeClient() {
public void onProgressChanged(WebView view, int progress) {
activity.setTitle("Loading...");
activity.setProgress(progress * 100);
if (progress == 100)
activity.setTitle(R.string.app_name);
} });
webView.setWebViewClient(new WebViewClient() {
#Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
// Handle the error
}
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true; } });}
public void onBackPressed() {
if (webView.canGoBack()) {
webView.goBack();
} else {
Intent B = new Intent(this, MainActivity.class);
startActivity(B);
}}
#Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
switch (keyCode) {
case KeyEvent.KEYCODE_BACK:
if (webView.canGoBack() == true) {
webView.goBack();
} else {
finish();
}return true;} }
return super.onKeyDown(keyCode, event);
}
#Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
}}
You have to create a subclass of WebViewClient and override mailto URL loading. Example:
public class MyWebViewClient extends WebViewClient {
private final WeakReference<Activity> mActivityRef;
public MyWebViewClient(Activity activity) {
mActivityRef = new WeakReference<Activity>(activity);
}
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("mailto:")) {
final Activity activity = mActivityRef.get();
if (activity != null) {
MailTo mt = MailTo.parse(url);
Intent i = newEmailIntent(activity, mt.getTo(), mt.getSubject(), mt.getBody(), mt.getCc());
activity.startActivity(i);
view.reload();
return true;
}
} else {
view.loadUrl(url);
}
return true;
}
private Intent newEmailIntent(Context context, String address, String subject, String body, String cc) {
Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_EMAIL, new String[] { address });
intent.putExtra(Intent.EXTRA_TEXT, body);
intent.putExtra(Intent.EXTRA_SUBJECT, subject);
intent.putExtra(Intent.EXTRA_CC, cc);
intent.setType("message/rfc822");
return intent;
}
}
Then you have to set this custom WebViewClient to your WabView:
webView.setWebViewClient(new MyWebViewClient(activity);
You should update your's WebViewClient with the following:
#SuppressWarnings("deprecation")
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
proceedUrl(view, Uri.parse(url))
return true;
}
#TargetApi(Build.VERSION_CODES.N)
#Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
proceedUrl(view, request.getUrl());
return true;
}
private void proceedUrl(View view, Uri uri){
if (uri.toString().startsWith("mailto:")) {
startActivity(new Intent(Intent.ACTION_SENDTO, uri));
} else if (uri.toString().startsWith("tel:")) {
startActivity(new Intent(Intent.ACTION_DIAL, uri));
} else {
view.loadUrl(uri.toString());
}
}
Note : - After Android Nougat shouldOverrideUrlLoading is Deprecated
You need to use shouldOverrideUrlLoading along with shouldOverrideUrlLoading for better support.
Also, you might want to check if URL have mailto: or tel:, which are used in HTML5 to trigger mail client and phone dial respectively.
A complete solution will look like this now
#SuppressWarnings("deprecation")
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("mailto:")) {
//Handle mail Urls
startActivity(new Intent(Intent.ACTION_SENDTO, Uri.parse(url)));
} else if (url.startsWith("tel:")) {
//Handle telephony Urls
startActivity(new Intent(Intent.ACTION_DIAL, Uri.parse(url)));
} else {
view.loadUrl(url);
}
return true;
}
#TargetApi(Build.VERSION_CODES.N)
#Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
final Uri uri = request.getUrl();
if (uri.toString().startsWith("mailto:")) {
//Handle mail Urls
startActivity(new Intent(Intent.ACTION_SENDTO, uri));
} else if (uri.toString().startsWith("tel:")) {
//Handle telephony Urls
startActivity(new Intent(Intent.ACTION_DIAL, uri));
} else {
//Handle Web Urls
view.loadUrl(uri.toString());
}
return true;
}
Related
I am trying android webview but whatsapps button give an error when i want to connect whatsapp app in my mobile, the error is like - ERR_UNKNOWN_URI_SCHEME,
below are my code, please help me-
public class MainActivity extends AppCompatActivity {
private WebView mywebView;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mywebView=(WebView) findViewById(R.id.webview);
mywebView.setWebViewClient(new WebViewClient());
mywebView.loadUrl("https://royalahm.com");
WebSettings webSettings=mywebView.getSettings();
webSettings.setJavaScriptEnabled(true);
}
public class mywebClient extends WebViewClient{
#Override
public void onPageStarted(WebView view, String url, Bitmap favicon){
super.onPageStarted(view,url,favicon);
}
#Override
public boolean shouldOverrideUrlLoading(WebView view,String url){
if(url.startsWith("whatsapp:")) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
}
return false;
}
}
#Override
public void onBackPressed(){
if(mywebView.canGoBack()) {
mywebView.goBack();
}
else{
super.onBackPressed();
}
}
}
Try This :
public class mywebClient extends WebViewClient{
#Override
public void onPageStarted(WebView view, String url, Bitmap favicon){
super.onPageStarted(view,url,favicon);
}
#Override
public boolean shouldOverrideUrlLoading(WebView view,String url){
if( url.startsWith("http:") || url.startsWith("https:") ) {
return false;
}
try {
// Otherwise allow the OS to handle things like tel, mailto, etc.
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
}catch (Exception e){
Log.i("IvaExc",e.toString());
}
return true;
}
}
I have problem with reducing the time of displaying progress bar in WebView. For underesting a add image. enter image description here.
Where I can implement some thread of something to stop showing progress bar for one second, while my web running in WebView?
I tried implement thread before showing progress bar in onPageStarted, but it waiting for whole loading page, not only for loading progress bar.
We have very slow loading on web page, so we need showing to users one or two second loading page in webview without progressbar, after this time show "loading" progress bar.
If you have question, please ask me, we need quick respond to resolve this problem. I'm trying to find some solution, but nothing.
Thanks a lot!
There is my ChromeClien.class
public class MyWebChromeClient extends WebChromeClient {
private ProgressListener mListener;
public MyWebChromeClient(ProgressListener listener) {
mListener = listener;
}
#Override
public void onProgressChanged(WebView view, int newProgress) {
mListener.onUpdateProgress(newProgress);
super.onProgressChanged(view, newProgress);
}
public interface ProgressListener {
public void onUpdateProgress(int progressValue);
}}
There is MainActivity.class
public class MainActivity extends AppCompatActivity{
private WebView webview;
ProgressDialog prDialog;
String cekani;
#SuppressLint("SetJavaScriptEnabled")
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
CookieManager.getInstance().setAcceptCookie(true);
Boolean isFirstRun = getSharedPreferences("PREFERENCE", MODE_PRIVATE)
.getBoolean("isFirstRun", true);
if (isFirstRun) {
//show start activity
startActivity(new Intent(MainActivity.this, PrvniSpusteni.class));
}
getSharedPreferences("PREFERENCE", MODE_PRIVATE).edit()
.putBoolean("isFirstRun", false).commit();
if(KontrolaInternetu.isInternetAvailable(MainActivity.this)) //Vrátí hodnotu TRUE, pokud je připojení k internetu k dispozici
{
webview =(WebView)findViewById(R.id.webView);
//Nastavení webové stránky
webview.loadUrl(getString(R.string.url_aplikace));
webview.setWebViewClient(new MyWebViewClient());
//Puštění JavaScriptu pro web
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webview.getSettings().setDomStorageEnabled(true);
webview.getSettings().setUseWideViewPort(true);
webview.setOverScrollMode(WebView.OVER_SCROLL_NEVER);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
WebSettings ws = webview.getSettings();
ws.setJavaScriptEnabled(true);
ws.setAllowFileAccess(true);
if (android.os.Build.VERSION.SDK_INT >= 21) {
CookieManager.getInstance().setAcceptThirdPartyCookies(webview, true);
}else {
CookieManager.getInstance().setAcceptCookie(true);
}
webview.setWebChromeClient(new WebChromeClient(){
#TargetApi(Build.VERSION_CODES.LOLLIPOP)
#Override
public void onPermissionRequest(final PermissionRequest request) {
request.grant(request.getResources());
}
});
if (Build.VERSION.SDK_INT>=Build.VERSION_CODES.ECLAIR) {
try {
Log.d(TAG, "Enabling HTML5-Features");
Method m1 = WebSettings.class.getMethod("setDomStorageEnabled", new Class[]{Boolean.TYPE});
m1.invoke(ws, Boolean.TRUE);
Method m2 = WebSettings.class.getMethod("setDatabaseEnabled", new Class[]{Boolean.TYPE});
m2.invoke(ws, Boolean.TRUE);
Method m3 = WebSettings.class.getMethod("setDatabasePath", new Class[]{String.class});
m3.invoke(ws, "/data/data/" + getPackageName() + "/databases/");
Method m4 = WebSettings.class.getMethod("setAppCacheMaxSize", new Class[]{Long.TYPE});
m4.invoke(ws, 1024*1024*8);
Method m5 = WebSettings.class.getMethod("setAppCachePath", new Class[]{String.class});
m5.invoke(ws, "/data/data/" + getPackageName() + "/cache/");
Method m6 = WebSettings.class.getMethod("setAppCacheEnabled", new Class[]{Boolean.TYPE});
m6.invoke(ws, Boolean.TRUE);
Log.d(TAG, "Enabled HTML5-Features");
}
catch (NoSuchMethodException e) {
Log.e(TAG, "Reflection fail", e);
}
catch (InvocationTargetException e) {
Log.e(TAG, "Reflection fail", e);
}
catch (IllegalAccessException e) {
Log.e(TAG, "Reflection fail", e);
}
}
}
else
{
//Zobrazení AlertDialogu pokud není připojení k internetu
runOnUiThread(new Runnable() {
#Override
public void run() {
if (!isFinishing()){
new AlertDialog.Builder(MainActivity.this)
.setTitle(getString(R.string.no_internet))
.setMessage(getString(R.string.internet))
.setCancelable(false)
.setIcon(R.drawable.icon)
.setPositiveButton(getString(R.string.ok), new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialog, int which) {
finish();
System.exit(0);
}})
.setNegativeButton(getString(R.string.zrusit), new DialogInterface.OnClickListener() {
#Override
public void onClick(DialogInterface dialogInterface, int i) {
}})
.show();
}
}
});
}
}
//Při stisknutí tlačítka zpět se uživatel vrátí ve webview nazpět bez toho, aby aplikace spadla.
private final String TAG = MainActivity.class.getSimpleName();
// Progress bar - zobrazí se tehdy, pokud čekám na načítání stránky
private class MyWebViewClient extends WebViewClient {
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
#Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
prDialog = new ProgressDialog(MainActivity.this);
prDialog.setIcon(R.drawable.icon);
prDialog.setMessage(getString(R.string.nacitani_webove_stranky));
prDialog.show();
}
#Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if(prDialog!=null){
prDialog.dismiss();
}
}
}
//Při stisknutí tlačítka zpět se uživatel dostane zpět pouze ve webview
#Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if(event.getAction() == KeyEvent.ACTION_DOWN){
switch(keyCode)
{
case KeyEvent.KEYCODE_BACK:
if(webview.canGoBack() == true){
webview.goBack();
}else{
finish();
}
return true;
}
}
return super.onKeyDown(keyCode, event);
}
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.endsWith(".mp3")) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(url), "audio/*");
view.getContext().startActivity(intent);
return true;
} else if (url.endsWith(".mp4") || url.endsWith(".3gp")) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(Uri.parse(url), "video/*");
view.getContext().startActivity(intent);
return true;
} else {
return true;
}}}
Hey bro, you don't necessarily need to implement threads for your
requirement. Firstly you can load the url in the webview and after a
particular time period you can start displaying progress bar. For
calling the progress bar after certain time period you can use
Handler.
private class MyWebViewClient extends WebViewClient {
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
#Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
final Handler handler = new Handler();
handler.postDelayed(new Runnable() {
#Override
public void run() {
//Do something after 100ms
prDialog = new ProgressDialog(MainActivity.this);
prDialog.setIcon(R.drawable.icon);
prDialog.setMessage(getString(R.string.nacitani_webove_stranky));
prDialog.show();
}
}, 100);
}
#Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
if(prDialog!=null){
prDialog.dismiss();
}
}
In my app i am using webview to display some web data, i want to implement a functionality where if a user clicks on any link a new screen (activity) will open and url's data will be displayed in that activity's webview. i have tried setting a webview client to webview and overriding its onPageStarted,shouldOverrideUrlLoading methods but they all open the url within the same screen.
Here is my code
webview.loadData(html, "text/html; charset=utf-8", "UTF-8");
webview.setWebViewClient(webViewClient);
}
WebViewClient webViewClient = new WebViewClient() {
#Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
if (url.startsWith("http://")) {
Intent intent = new Intent(FirstActivity.this, WebActivity.class);
intent.putExtra("url", url);
startActivity(intent);
}
}
#Override
public void onPageFinished(WebView view, String url) {
}
#SuppressWarnings("deprecation")
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
#TargetApi(Build.VERSION_CODES.N)
#Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return false;
}
#Override
public void onLoadResource(WebView view, String url) {
super.onLoadResource(view, url);
}
};
How this can be implemented? any help will be appreciated
Try this:
#SuppressWarnings("deprecation")
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("http://")) {
Intent intent = new Intent(FirstActivity.this, WebActivity.class);
intent.putExtra("url", url);
startActivity(intent);
return true;
}
return false;
}
#TargetApi(Build.VERSION_CODES.N)
#Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
if (url.startsWith("http://")) {
Intent intent = new Intent(FirstActivity.this, WebActivity.class);
intent.putExtra("url", url);
startActivity(intent);
return true;
}
return false;
}
Try this. But you first need to set a start website like google.com
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.KeyEvent;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends Activity {
private WebView view;
#Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
view = (WebView) this.findViewById(R.id.webView);
view.getSettings().setJavaScriptEnabled(true);
view.getSettings().setDomStorageEnabled(true);
view.setWebViewClient(new MyBrowser());
view.loadUrl("[YOUR_WEBSITE]"); //try js alert
view.setWebChromeClient(new WebChromeClient()); // adding js alert support
}
private class MyBrowser extends WebViewClient {
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.startsWith("tel:") || url.startsWith("sms:") || url.startsWith("smsto:") || url.startsWith("mailto:") || url.startsWith("mms:") || url.startsWith("mmsto:") || url.startsWith("market:")) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
startActivity(intent);
return true;
}
else {
view.loadUrl(url);
return true;
}
}
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && view.canGoBack()) {
view.goBack(); //method goback()
return true;
}
return super.onKeyDown(keyCode, event);
}
}
If links are external to the site, you could do something like this:
webview.setWebViewClient(new LinkExtWebViewClient());
And then:
public class LinkExtWebViewClient extends WebViewClient {
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(Uri.parse(url).getHost().endsWith(" if your site is www.myurl.com, here you have to insert 'myurl.com' ")) {
return false;
}
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
view.getContext().startActivity(intent);
return true;
}
}
Let me know if it works :)
My Webview works in android 4.4.4 and higher.How can I handle it in all android devices?!
I mean I tried many ways to show PaymentGateWay in Webview but it`s just shown url address in webview page(Cant Load Url).how can I do it with this code?
WebSettings webSetting = wv.getSettings();
webSetting.setJavaScriptEnabled(true);
webSetting.setJavaScriptCanOpenWindowsAutomatically(true);
final JavaScriptInterface JavaScriptInterface = new JavaScriptInterface(WebViewPaymentByBankActivity.this);
wv.addJavascriptInterface(JavaScriptInterface, "Android");
//webView.setWebChromeClient(new MyWebChromeClient());
//webView.getSettings().setSupportMultipleWindows(true);
//webSetting.setPluginState(WebSettings.PluginState.ON);
//webSetting.setPluginState(WebSettings.PluginState.ON_DEMAND);
//webSetting.setDomStorageEnabled(true);
webSetting.setCacheMode(WebSettings.LOAD_NO_CACHE);
webSetting.setAppCacheEnabled(true);
wv.setWebChromeClient(new WebChromeClient() {
public boolean onJsAlert(WebView view, String url, String message, final android.webkit.JsResult result) {
//Toast.makeText(WebViewPaymentByBankActivity.this, message, Toast.LENGTH_LONG).show();
result.confirm();
return true;
}
public void onProgressChanged(WebView view, int progress) {
activity.setProgress(progress * 1000);
if (progress == 100) {
}
}
});
wv.setWebViewClient(new WebViewClient() {
#JavascriptInterface
#Override
public boolean shouldOverrideUrlLoading(WebView view, String urlNewString) {
if (!loadingFinished) {
redirect = true;
}
loadingFinished = false;
wv.loadUrl(urlNewString);
url_result = urlNewString;
uri = Uri.parse(url_result);
String[] result = url_result.split("://");
protocol = result[0];
host = result[1];
if (protocol.equals("inapp")) {
if (host.equals("Error")) {
Intent intent = new Intent(WebViewPaymentByBankActivity.this,PaymentActivity.class);
startActivity(intent);
WebViewPaymentByBankActivity.this.finish();
}
else if (host.equals("Success")) {
Constants.ck_pay=true;
BasketFragment.sum = 0;
BasketFragment.txt_view_badge.setText("");
BasketFragment.txt_view_badge.setVisibility(View.GONE);
PaymentActivity.txt_view_pay_total.setText("0");
PaymentActivity.txt_view_pay_payable.setText("0");
WebViewPaymentByBankActivity.this.finish();
}
}
return false;
}
#Override
public void onPageFinished(WebView view, String url) {
if (!redirect) {
loadingFinished = true;
}
if (loadingFinished && !redirect) {
//HIDE LOADING IT HAS FINISHED
} else {
redirect = false;
}
super.onPageFinished(view, url);
view.clearCache(true);
}
#Override
#JavascriptInterface
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
super.onReceivedSslError(view, handler, error);
handler.proceed();
}
});
}
public class JavaScriptInterface {
Context mContext;
/**
* Instantiate the interface and set the context
*/
JavaScriptInterface(Context c) {
mContext = c;
}
/**
* Show a toast from the web page
*/
#JavascriptInterface
public void paymentResponse(String toast) {
Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
}
}
#Override
#JavascriptInterface
public boolean onKeyDown(int keyCode, KeyEvent event) {
// Check if the key event was the Back button and if there's history
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
wv.goBack();
Intent intent = new Intent(WebViewPaymentByBankActivity.this, PaymentActivity.class);
startActivity(intent);
WebViewPaymentByBankActivity.this.finish();
return true;
}
// If it wasn't the Back key or there's no web page history, bubble up to the default
// system behavior (probably exit the activity)
Intent intent = new Intent(WebViewPaymentByBankActivity.this, PaymentActivity.class);
startActivity(intent);
WebViewPaymentByBankActivity.this.finish();
return super.onKeyDown(keyCode, event);
}
I've in the following code the progressbar working on the first page load. after when I click on other links, the progrss bar is not shown ?
If somebody can tell me how to change this code to have the progress bar working on all loading ?
Thanks,
André.
public class Android_Activity extends Activity {
WebView webview;
#Override
protected void onSaveInstanceState(Bundle outState) {
WebView webview = (WebView) findViewById(R.id.webview);
webview.saveState(outState);
}
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// set the main content view
setContentView(R.layout.main);
// check if an instance is stored and so restore it
if (savedInstanceState != null){
((WebView)findViewById(R.id.webview)).restoreState(savedInstanceState);
}
final ProgressDialog progressBar = ProgressDialog.show(this, getString(R.string.progress_title),
getString(R.string.progress_msg));
webview = (WebView)findViewById(R.id.webview);
webview.setHttpAuthUsernamePassword(getString(R.string.kdg_host),
getString(R.string.kdg_realm),
getString(R.string.kdg_user_name),
getString(R.string.kdg_password)
);
//webview.setWebViewClient(new myWebViewClient());
webview.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
webview.getSettings().setRenderPriority(RenderPriority.HIGH);
webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE);
webview.getSettings().setAllowFileAccess(true);
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebViewClient(new WebViewClient() {
public void onPageStarted(WebView view, String url) {
if (!progressBar.isShowing()) {
progressBar.show();
}
}
public void onPageFinished(WebView view, String url) {
//super.onPageFinished(view, url);
if (progressBar.isShowing()) {
progressBar.dismiss();
}
}
});
webview.loadUrl(getString(R.string.base_url));
}
#Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && webview.canGoBack()) {
webview.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
private class myWebViewClient extends WebViewClient {
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
boolean error = false;
// check if it's an MAILTO URL
if(url.substring(0, 6).equalsIgnoreCase("mailto")){
Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent .setType("plain/text");
emailIntent .putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{url.substring(7)});
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
return true;
}
// check if it's an EXT:// (Call Web Browser)
else if(url.substring(0, 6).equalsIgnoreCase("ext://")){
Uri uriUrl = Uri.parse(url.substring(6));
Intent launchBrowser = new Intent(Intent.ACTION_VIEW, uriUrl);
startActivity(launchBrowser);
return true;
}
// check if it's an RTSP URL
else if(url.substring(0, 4).equalsIgnoreCase("rtsp")){
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
return true;
}
// else if it's an MP4 file link
else if(url.endsWith(".mp4")){
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "video/mp4");
startActivity(intent);
return true;
}
// else if it's a 3GP file link
else if(url.endsWith(".3gp")){
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "video/3gp");
startActivity(intent);
return true;
}
// else if it's a MP3 file link
else if(url.endsWith(".mp3")){
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setDataAndType(uri, "audio/mp3");
startActivity(intent);
return true;
}
// else if it's a page URL
else{
URL Url;
try {
Url = new URL(url);
HttpURLConnection httpURLConnection = (HttpURLConnection) Url
.openConnection();
int response = httpURLConnection.getResponseCode();
if ((response >= 200)&&(response < 400))
//view.loadUrl(url);
error = false;
else
error = true;
} catch (Exception e) {
error = true;
}
}
// if an error occurred
if (error) {
showErrorDialog();
}
view.loadUrl(url);
return true;
}
}
#Override
public void onResume() {
super.onResume();
webview.reload();
}
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
showErrorDialog();
}
public void showErrorDialog(){
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle(getString(R.string.error_title));
alertDialog.setMessage(getString(R.string.error_msg));
alertDialog.setButton(getString(R.string.ok_btn),
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int which) {
}
});
alertDialog.show();
}
}
Use below working code ::
public class Android_Activity extends Activity {
private Android_Activity _activity;
#Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_PROGRESS);
_activity = this;
setContentView(R.layout.main);
mwebview=(WebView)view.findViewById(R.id.webview);
mwebview.getSettings().setJavaScriptEnabled(true);
mwebview.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);
if(checkInternetConnection(_activity)==true){
if(savedInstanceState==null)
mwebview.loadUrl(URL);
else
mwebview.restoreState(savedInstanceState);
}
else{
AlertDialog.Builder builder = new AlertDialog.Builder(_activity);
builder.setMessage("Please check your network connection.")
.setCancelable(false)
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
}
});
AlertDialog alert = builder.create();
alert.show();
}
mwebview.setWebChromeClient(new WebChromeClient() {
#Override
public void onProgressChanged(WebView view, int progress) {
if(mwebview.getVisibility()==View.VISIBLE)
{
_activity.setProgress(progress * 100);
}
}
});
mwebview.setWebViewClient(new HelloWebViewClient());
}
//HelloWebViewClient class for webview
private class HelloWebViewClient extends WebViewClient {
#Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
// TODO Auto-generated method stub
super.onPageStarted(view, url, favicon);
}
#Override
public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
// TODO Auto-generated method stub
super.onReceivedError(view, errorCode, description, failingUrl);
}
#Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
super.onPageFinished(view, url);
}
#Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
// Otherwise, the link is not for a page on my site, so launch another Activity that handles URLs
view.loadUrl(url);
return true;
}
} //HelloWebViewClient-class
#Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// Check if the key event was the Back button and if there's history
if ((keyCode == KeyEvent.KEYCODE_BACK) && mwebview.canGoBack() ){
mwebview.goBack();
return true;
}
// If it wasn't the Back key or there's no web page history, bubble up to the default
// system behavior (probably exit the activity)
return super.onKeyDown(keyCode, event);
}
//To check whether network connection is available on device or not
public static boolean checkInternetConnection(Activity _activity) {
ConnectivityManager conMgr = (ConnectivityManager) _activity.getSystemService(Context.CONNECTIVITY_SERVICE);
if (conMgr.getActiveNetworkInfo() != null
&& conMgr.getActiveNetworkInfo().isAvailable()
&& conMgr.getActiveNetworkInfo().isConnected())
return true;
else
return false;
}//checkInternetConnection()
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.KDG_EPG_Iphone"
android:versionCode="1"
android:versionName="1.00.00" android:installLocation="auto">
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<supports-screens
android:resizeable="false"
android:smallScreens = "false"
android:normalScreens = "true"
android:largeScreens = "false"
android:anyDensity = "true"/>
<uses-sdk android:minSdkVersion="8"/>
<application android:label="#string/app_name" android:icon="#drawable/icon">
<activity android:screenOrientation="portrait"
android:theme="#android:style/Theme.Black.NoTitleBar"
android:configChanges="keyboardHidden|orientation"
android:label="#string/app_label" android:name="com.KDG_EPG_Iphone.KDG_EPG_Iphone_Activity" android:icon="#drawable/icon">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>