Welcome!

Welcome to the Official BlackBerry Support Community Forums. This is your resource to discuss support topics with your peers, and learn from each other. New to the forum? Please visit the ‘Getting Started’ link below.
inside custom component

Java Development

Reply
Developer
YamilBracho
Posts: 519
Registered: ‎05-31-2010
My Carrier: Movistar
Accepted Solution

Check if internet access available

Hi I am using this rotuine to check if my app has internet access to conect to some web services.

public static boolean isInternetAvailable() {
		boolean result = false;

		// Toma transportes disponibles
		int[] transportArray = TransportInfo.getAvailableTransportTypes();
		for (int i = transportArray.length - 1; i > - 1; i--) {
			if (TransportInfo.hasSufficientCoverage(i)) {
				result = true;
				break;
			}
		}

		return result;
	}

 But this code sometimes work. I am running in the simulator (and phones, specially with OS 7) and I am positive I have network acess, however the method return false sometimes...

 

Is there another safer way to check this ?

Please use plain text.
Developer
YamilBracho
Posts: 519
Registered: ‎05-31-2010
My Carrier: Movistar

Re: Check if internet access available

After a check, the problem is with version 7.0. 5.0 and 6 works fine.

Must use Manage Connection to reset Mobile NetWork and WI-FI. 

Then I call two web services (in this case they are in tah same server). My result are :

 

5.0
Transporte WIFI
http://XXX.XXX.XXX.XXX/MyWebService.asmx;deviceside=true
Response OK

Transporte WIFI
http://XXX.XXX.XXX.XXX/MyWebService.asmx2;deviceside=true
Response OK

-------------------------------------------------------------------------------------------
7.0
Erratic - Must use Manage Connection to reset Mobile NetWork and WI-FI
Transporte WIFI
http://XXX.XXX.XXX.XXX/MyWebService.asmx;deviceside=true
Response OK

Transporte WIFI
http://XXX.XXX.XXX.XXX/MyWebService.asmx2;deviceside=false;ConnectionUID=S 00005;ConnectionTimeout=10000
Time out...

 

Note than in the second call it does not recognize that I running this app in the simulator..!!!!

My code to get the available transpor is :

 

String url = mUrl;

ConnectionFactory cf = new MyConnectionFactory();
ConnectionDescriptor cd = cf.getConnection(url);
url = cd.getUrl();

mHttpTransport = new HttpTransport(url);
mHttpTransport.call(mSoapAction, mEnvelope);
Object response = mEnvelope.getResponse();
mResponse = response.toString().trim();

....

class MyConnectionFactory extends ConnectionFactory {

	public MyConnectionFactory() {
		setPreferredTransportTypes(new int[] {
				TransportInfo.TRANSPORT_TCP_WIFI,
				TransportInfo.TRANSPORT_MDS,
				TransportInfo.TRANSPORT_TCP_CELLULAR,
				TransportInfo.TRANSPORT_WAP2 });

		setDisallowedTransportTypes(new int[] {
				TransportInfo.TRANSPORT_WAP, TransportInfo.TRANSPORT_BIS_B });

		setAttemptsLimit(10);
		setConnectionTimeout(10000);
		setTimeLimit(10000);
	}
}

 

Is there a special treatment for OS 7 or something is wrong in my code ?

 

TIA

 

Please use plain text.
Developer
simon_hain
Posts: 13,830
Registered: ‎07-29-2008
My Carrier: O2 Germany

Re: Check if internet access available

i use http://www.blackberry.com/developers/docs/7.1.0api/net/rim/device/api/system/CoverageInfo.html#isCov...
----------------------------------------------------------
feel free to press the like button on the right side to thank the user that helped you.
please mark posts as solved if you found a solution.
@SimonHain on twitter
Please use plain text.
Developer
YamilBracho
Posts: 519
Registered: ‎05-31-2010
My Carrier: Movistar

Re: Check if internet access available

Thanks Simon.

I rewrote my code to :

public static boolean isInternetAvailable() {
	boolean result = false;

	int[] coverageArray = { CoverageInfo.COVERAGE_BIS_B,
			CoverageInfo.COVERAGE_DIRECT, CoverageInfo.COVERAGE_MDS };

	int[] wafArray = { RadioInfo.WAF_3GPP, RadioInfo.WAF_CDMA,
			RadioInfo.WAF_IDEN, RadioInfo.WAF_WLAN };

	int coverageLen = coverageArray.length;
	int wafLen = wafArray.length;
	for (int i=0; i < coverageLen && !result; i++) {
		for (int j = 0; j < wafLen; j++) {
			if (CoverageInfo.isCoverageSufficient(coverageArray[i],
					wafArray[j], false)) {
				result = true;
				break;
			}
		}
	}
	
	return result;
}	

 Is it OK ? It looks like it working fine now..

Please use plain text.
Developer
simon_hain
Posts: 13,830
Registered: ‎07-29-2008
My Carrier: O2 Germany

Re: Check if internet access available

COVERAGE_DIRECT is the lowest possible value, and if you don't use the waf parameter it is ignored.
afaik you can just use isCoverageSufficient(CoverageInfo.COVERAGE_DIRECT) and be done with it, no need to iterate.
----------------------------------------------------------
feel free to press the like button on the right side to thank the user that helped you.
please mark posts as solved if you found a solution.
@SimonHain on twitter
Please use plain text.
Developer
YamilBracho
Posts: 519
Registered: ‎05-31-2010
My Carrier: Movistar

Re: Check if internet access available

Simon, so just

 

public static boolean isInternetAvailable() {
	return CoverageInfo.isCoverageSufficient(CoverageInfo.COVERAGE_DIRECT); 
}

 It run fine...

Thanks a lot Simon...!!!!!

Please use plain text.
Developer
simon_hain
Posts: 13,830
Registered: ‎07-29-2008
My Carrier: O2 Germany

Re: Check if internet access available

yes, sometimes it is really that simple :smileyhappy:
----------------------------------------------------------
feel free to press the like button on the right side to thank the user that helped you.
please mark posts as solved if you found a solution.
@SimonHain on twitter
Please use plain text.