Reputation: 43
iam begineer in android development , i would like to diplay my custom/own error message instead of web page not avaialble message when my device is not connected to internet .
Here is my Main activity.java Source:
import android.app.ActionBar;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ShareActionProvider;
public class MainActivity extends Activity {
private WebView mWebView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);
mWebView = (WebView) findViewById(R.id.activity_main_webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
mWebView.loadUrl("http://tech2dsk.blogspot.in/");
mWebView.setWebViewClient(new com.example.tech2dsk.tech2dsk.MyAppWebViewClient(){
@Override
public void onPageFinished(WebView view, String url) {
//hide loading image
findViewById(R.id.progressBar1).setVisibility(View.GONE);
//show webview
findViewById(R.id.activity_main_webview).setVisibility(View.VISIBLE);
}});
}
@Override
public void onBackPressed() {
if(mWebView.canGoBack()) {
mWebView.goBack();
} else {
super.onBackPressed();
}
}
private ShareActionProvider mShareActionProvider;
@Override
public boolean onCreateOptionsMenu(Menu menu) {
/** Inflating the current activity's menu with res/menu/items.xml */
getMenuInflater().inflate(R.menu.menu_main, menu);
/** Getting the actionprovider associated with the menu item whose id is share */
mShareActionProvider = (ShareActionProvider) menu.findItem(R.id.share).getActionProvider();
/** Setting a share intent */
mShareActionProvider.setShareIntent(getDefaultShareIntent());
return super.onCreateOptionsMenu(menu);
}
/** Returns a share intent */
private Intent getDefaultShareIntent(){
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_SUBJECT, "Convert Website to Android Application");
intent.putExtra(Intent.EXTRA_TEXT," Vist www.AndroidWebViewApp.com if you Want to Convert your Website or Blog to Android Application");
return intent;
}
}
and here is myappwebviewclient.java source :
import android.content.Intent;
import android.net.Uri;
import android.webkit.WebView;
import android.webkit.WebViewClient;
/**
* Created by Karthik's on 3/5/2015.
*/
public class MyAppWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if(Uri.parse(url).getHost().endsWith("tech2dsk.blogspot.in")) {
return false;
}
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
view.getContext().startActivity(intent);
return true;
}
}
Plz help me in Fixing this.
Upvotes: 0
Views: 3181
Reputation: 541
Check this link on stackoverflow. They talk about to check and customize.
or if want to check if it was internet connection, you can use:
public static boolean checkAppConnectionStatus(Context context) {
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm.getActiveNetworkInfo() != null
&& cm.getActiveNetworkInfo().isAvailable()
&& cm.getActiveNetworkInfo().isConnected()) {
return true;
}else{
return false;
}
}
So you can call anywhere:
if (!Utils.checkAppConnectionStatus(ActivityClass.this)){
Toast.makeText(ActivityClass.this,"No internet connection", Toast.LENGTH_SHORT).show();
Edit Answer
To create a layout to show when doesn't have internet you can do:
One way, is create a layout and set visible or invisible. Other way is Inflate a new Layout.
Here I'll show to you how to create a layout and make visible or invisible.
First of all, create your basic layout to show when doesn't have internet:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/no_internet_connection"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:visibility="gone">
<TextView
android:id="@+id/no_internet_connection_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:layout_gravity="center_horizontal"
android:text="Error: No internet connection!"
android:textSize="25sp"/>
</RelativeLayout>
note android:visibility="gone"
set your layout invisible and it doesn't fill any space in your main layout.
Now include in your main activity <include layout="@layout/name_of_your_activity"/>
Create two methods in a class that you can access easily(I recommend to put together with your checkAppConnectionStatus(Context context)
public static void setLayoutInvisible(View viewName) {
if (viewName.getVisibility() == View.VISIBLE) {
viewName.setVisibility(View.GONE);
}
}
public static void setLayoutVisible(View viewName) {
if (viewName.getVisibility() == View.GONE ) {
viewName.setVisibility(View.VISIBLE);
}
}
So now just work with these methods in your main activiy, like:
private View mNoInternetConnection;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_activity);
// Get layout that you had included in you main_activiy.xml
mNoInternetConnection = findViewById(R.id.no_internet_connection);
.
.
.
.
..
...
....
// Check the internet connect
if (!Utils.checkAppConnectionStatus(ActivityClass.this)){
// If do not have internet connection, set layout visible
Utils.setLayoutVisible(mNoInternetConnection);
}else{
// If have internet connection, set layout invisible
Utils.setLayoutInvisible(mNoInternetConnection);
Upvotes: 1
Reputation: 856
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo nf = cm.getActiveNetworkInfo();
if (nf != null && nf.isConnected()){
// do your stuff here
} else {
Toast.makeText(getApplicationContext(), "No Internet Connection", Toast.LENGTH_LONG).show();
}
}
Upvotes: 1