Testing of Network Connection can be done by following method:
public boolean isNetworkAvailable()
{
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isConnected())
{
return true;
}
return false;
}
But i don't know how to check the server connection.I had followed this method
public boolean isConnectedToServer(String url, long timeout) {
try{
URL myUrl = new URL(url);
URLConnection connection = myUrl.openConnection();
connection.setConnectTimetout(timeout);
connection.connect();
return true;
} catch (Exception e) {
// Handle your exceptions
return false;
}
}
it doesn't works....Any Ideas Guys!!
you can check a server connection is available or not using isReachable():
netAddress address = InetAddress.getByName(HOST_NAME);
boolean reachable = address.isReachable(timeout);
and by using runtime:
Runtime runtime = Runtime.getRuntime();
Process proc = runtime.exec("ping www.google.com");
public boolean isConnectedToServer(String url, int timeout) {
try{
URL myUrl = new URL(url);
URLConnection connection = myUrl.openConnection();
connection.setConnectTimeout(timeout);
connection.connect();
return true;
} catch (Exception e) {
// Handle your exceptions
return false;
}
}
and also add intent permission in your manifest
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
Related
I am creating an android app which relies on the internet. How do I handle the case in which the phone is connected to the Wifi but it is not actually working?
As in the case when there is an exclamation mark next to the wifi icon in the StatusBar?
Add Permissions:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
Try this mehod :
public boolean isOnline() {
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnected()) {
try {
URL url = new URL("http://www.google.com");
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setConnectTimeout(3000);
urlc.connect();
if (urlc.getResponseCode() == 200) {
return new Boolean(true);
}
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return false;
}
You can detect wifi speed and if the speed is very low then you can handle the situation.
First, check if your connection type is wifi-
ConnectivityManager cm =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
boolean isConnected = activeNetwork != null &&
activeNetwork.isConnectedOrConnecting();
boolean isWiFi = activeNetwork.getType() == ConnectivityManager.TYPE_WIFI;
if(isWifi){
WifiInfo wifiInfo = wifiManger.getConnectionInfo();
int mbps = wifiInfo.getLinkSpeed();
}
i used this code to call web service from xamarin :
void OnWebserviceRetrievedInformation1 (object sender, EventArgs e)
{
MyService.MonoDataService ms = new MyService.MonoDataService ();
ms.Url = "http://10.0.2.2:11339/MonoDataService.asmx";
TextView tx=FindViewById<TextView> (Resource.Id.textView1);
tx.Text = ms.Hello ("Hadi");
}
but when web server is offline my apps is in loop !
how can check web service is available and then call ?
Try something like this :
public bool IsConnected()
{
try{
var cm = (ConnectivityManager)GetSystemService (Context.ConnectivityService);
var netInfo = cm.ActiveNetworkInfo;
if (netInfo != null && netInfo.IsConnected)
{
//Network is available but check if we can get access from the network.
var url = new URL("http://www.Google.com/");
var urlc = (HttpURLConnection) url.OpenConnection();
urlc.SetRequestProperty("Connection", "close");
urlc.ConnectTimeout = 2000; // Timeout 2 seconds.
urlc.Connect();
if (urlc.ResponseCode == 200) //Successful response.
return true;
else {
Log.Debug ("No Internet", "No internet connection.");
return false;
}
}
}
catch(Exception ex)
{
System.Diagnostics.Debug.WriteLine (ex.Message);
}
return false;
}
Check Using this method:
public boolean isConnected()
{
try{
ConnectivityManager cm = (ConnectivityManager) getSystemService
(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getActiveNetworkInfo();
if (netInfo != null && netInfo.isConnected())
{
//Network is available but check if we can get access from the network.
URL url = new URL("http://10.0.2.2:11339/MonoDataService.asmx"");
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(2000); // Timeout 2 seconds.
urlc.connect();
if (urlc.getResponseCode() == 200) //Successful response.
{
return true;
}
else
{
Log.d("NO INTERNET", "NO INTERNET");
return false;
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
return false;
}
I'm trying to find the way to know when an user has Internet connection, since now I've got this method :
public boolean isNetworkOnline() {
boolean status=false;
try{
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = cm.getNetworkInfo(1);
if (netInfo != null && netInfo.getState()==NetworkInfo.State.CONNECTED) {
status= true;
}
}catch(Exception e){
e.printStackTrace();
return false;
}
return status;
}
This method returns true if user is CONNECTED but not if user has INTERNET CONNECTION, so I thought to if this method returns true, call another method to check if the user has connection to internet. For example someone can be connected to a router but without internet connection so I want to know when the user has internet connection or not.
I've read this answer and this other but all of them is returning me false when I've got Internet connection.... I thought that make a method that makes a ping to www.google.com it's a good approach to know if someone has internet connection so I tried to get this way but it didn't work for me...
Any idea or good approach (if it's better than my thoughts is better) to know when the user has internet connection?
The Simple Way To Check Internet Connectivity
public boolean isConnectingToInternet() {
if (networkConnectivity()) {
try {
Process p1 = Runtime.getRuntime().exec(
"ping -c 1 www.google.com");
int returnVal = p1.waitFor();
boolean reachable = (returnVal == 0);
if (reachable) {
System.out.println("Internet access");
return reachable;
} else {
return false;
}
} catch (Exception e) {
return false;
}
} else
return false;
}
private boolean networkConnectivity() {
ConnectivityManager cm = (ConnectivityManager) _context
.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
return networkInfo != null && networkInfo.isConnected();
}
How To Call it
if (isConnectingToInternet()) {
// internet is connected and work properly...
}
else {
// something went wrong internet not working properly...
}
So simply copy and past the above two methods where you want to check the Internet connectivity. After that check the condition if (isConnectingToInternet()) { }
Can you try this method?
public boolean checkInternectConnection() {
try {
InetAddress inAddress= InetAddress.getByName("http://google.com");
if (inAddress.equals("")) {
return false;
} else {
return true;
}
} catch (Exception e) {
return false;
}
}
Please check this answer out and see if its helpful or not
You can try out this code
try {
URL url = new URL("http://"+params[0]);
HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
urlc.setRequestProperty("User-Agent", "Android Application:"+Z.APP_VERSION);
urlc.setRequestProperty("Connection", "close");
urlc.setConnectTimeout(1000 * 30); // mTimeout is in seconds
urlc.connect();
if (urlc.getResponseCode() == 200) {
Main.Log("getResponseCode == 200");
return new Boolean(true);
}
} catch (MalformedURLException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
this is how i fixed this and i use it as a Utility method which can be called from any activity/fragment etc...:
public static boolean isNetworkAvailable(Context context) {
ConnectivityManager connectivityManager
= (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}//check if Wifi or Mobile data is enabled
private static class NetworkAsync extends AsyncTask<Void, Void, Boolean> {
#Override
protected Boolean doInBackground(Void... voids) {
try {
HttpURLConnection urlConnection = (HttpURLConnection)
(new URL("http://clients3.google.com/generate_204")
.openConnection());
urlConnection.setRequestProperty("User-Agent", "Android");
urlConnection.setRequestProperty("Connection", "close");
urlConnection.setConnectTimeout(1500);
urlConnection.connect();
return (urlConnection.getResponseCode() == 204 &&
urlConnection.getContentLength() == 0);
} catch (IOException e) {
// Error checking internet connection
}
return false;
}
}//network calls shouldn't be called from main thread otherwise it will throw //NetworkOnMainThreadException
and now you simply need to call this method from anywhere you want:
public static boolean checkInternetConnection(Context context) {
if (isNetworkAvailable(context)) {
try {
//used execute().get(); so that it gets awaited and returns the result
//after i receive a response
return new NetworkAsync().execute().get();
} catch (ExecutionException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
return false;
}
My application requires the internet to retrieve data from my database. Also, it uses Google Maps as the main activity. I found that whenever I test it with no internet connection, the screen goes black and then it just crashes. How should I handle this in my code when I have no internet?
try this.......
public boolean isNet()
{
boolean status=false;
String line;
try
{
URL url = new URL("http://www.google.com");
BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));
while(( line = reader.readLine()) != null)
{
}
status=true;
}
catch (IOException ex)
{
System.out.println("ex in isNet : "+ex.toString());
if(ex.toString().equals("java.net.UnknownHostException: www.google.com"))
status=false;
}
catch(Exception e)
{
}
return status;
}
if(status==true)
{
//Do your operation
}
else
show("No Internet Connection.");
You can check for internet connection:
public boolean isOnline()
{
//Getting the ConnectivityManager.
ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
//Getting NetworkInfo from the Connectivity manager.
NetworkInfo netInfo = cm.getActiveNetworkInfo();
//If I received an info and isConnectedOrConnecting return true then there is an Internet connection.
if (netInfo != null && netInfo.isConnectedOrConnecting())
{
return true;
}
return false;
}
and present a message for user if internet connection is not available.
The following code crashes when is no interenet connection :
public String gourl(String myurl,String params) {
URL url;
String rasp = "";
try {
url = new URL(myurl + params);
BufferedReader rd = new BufferedReader(new InputStreamReader(
url.openStream()));
String line = "";
while ((line = rd.readLine()) != null) {
rasp=rasp + line;
}
return rasp;
} catch (Exception e) {
Log.w("DHA", "EXCEPTIE URL");
}
return null;
}
How can i prevent this from happening ?
Check connection before execute your method, something like that:
public boolean isNetworkConnected() {
final ConnectivityManager conMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
final NetworkInfo activeNetwork = conMgr.getActiveNetworkInfo();
return activeNetwork != null && activeNetwork.getState() == NetworkInfo.State.CONNECTED;
}
Have you checked what the values of myurl and params are in the method?
It may be that url.openStream() is failing and causing a NullPointerException.
It's also helpful to rather do something like:
Log.w("DHA", "EXCEPTIE URL:" + e.toString());
Then you will see what the Exception is rather than having to guess.
Check for all Internet connection
For Wifi
public boolean isWifi(Context context){
try{
WifiManager wifi=(WifiManager)
context.getSystemService(Context.WIFI_SERVICE);
if(wifi.isWifiEnabled()){
return true;
}else{
return false;
}
}
catch(Exception e){
e.getMessage();
return false;
}
}
For Other Network
public boolean isOline(Context context){
try{
ConnectivityManager cm=(ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
if(cm==null)
return false;
NetworkInfo info=cm.getActiveNetworkInfo();
if(info==null)
return false;
return info.isConnectedOrConnecting();
}
catch(Exception e){
e.getMessage();
return false;
}
}
If any of them is present then process WS else show alert.And Never forget to mention
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>