PDA

View Full Version : Using Reachability code to check internet connection




uaecasher
Dec 10, 2009, 12:13 PM
hello,

I'm using the source of Reachability project given by apple to check if there is an internet connection, what I did is:

1) Add the Reachability.h and .m from the sample to my project
2) Add the SystemConfiguration.framework
3) the added the following code in my controllerview.m



[[Reachability sharedReachability] setHostName:@"www.google.com"];

NetworkStatus internetStatus = [[Reachability sharedReachability] remoteHostStatus];

if ((internetStatus != ReachableViaWiFiNetwork) && (internetStatus != ReachableViaCarrierDataNetwork))
{
UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"No Internet Connection" message:@"You require an internet connection via WiFi or cellular network for location finding to work." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[myAlert show];
[myAlert release];
}




here is the my .m code:



#import "testPickerViewController.h"
#import "Reachability.h"

@implementation testPickerViewController

@synthesize imgPicker;
@synthesize imgPickerCam;




-(void) viewDidLoad {

[[Reachability sharedReachability] setHostName:@"www.google.com"];

NetworkStatus internetStatus = [[Reachability sharedReachability] remoteHostStatus];

if ((internetStatus != ReachableViaWiFiNetwork) && (internetStatus != ReachableViaCarrierDataNetwork))
{
UIAlertView *myAlert = [[UIAlertView alloc] initWithTitle:@"No Internet Connection" message:@"You require an internet connection via WiFi or cellular network for location finding to work." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil];
[myAlert show];
[myAlert release];
}




if ( (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]))

{

[button removeFromSuperview];
}

}




- (IBAction)grabImage {

self.imgPicker = [[UIImagePickerController alloc] init];
self.imgPicker.delegate = self;
self.imgPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
[self presentModalViewController:self.imgPicker animated:YES];

}

-(IBAction)grabImageCam {



self.imgPickerCam = [[UIImagePickerController alloc] init];
self.imgPickerCam.delegate = self;
self.imgPickerCam.sourceType = UIImagePickerControllerSourceTypeCamera;
[self presentModalViewController:self.imgPickerCam animated:YES];

}




- (IBAction)uploadImage {
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

/*
turning the image into a NSData object
getting the image back out of the UIImageView
*/


NSData *imageData = UIImageJPEGRepresentation(image.image, 100);


// setting up the URL to post to
NSString *urlString = @"http://mozymac.com/upload.php";

// setting up the request object now

NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];

/*
add some header info now
we always need a boundary when we post a file
also we need to set the content type

You might want to generate a random boundary.. this is just the same
as my output from wireshark on a valid html post
*/
NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];

/*
now lets create the body of the post
*/

NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"userfile\"; filename=\".jpg\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:imageData]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
// setting the body of the post to the reqeust
[request setHTTPBody:body];

// now lets make the connection to the web

NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];


myTextField.text = (returnString);

[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];


}
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editInfo {
image.image = img;



[[picker parentViewController] dismissModalViewControllerAnimated:YES];
// need to show the upload image button now
upload.hidden = NO;

}



@end



I'm getting these errors:

http://mozymac.com/img/images/41Screen_shot_2009_12_10.png (http://mozymac.com/img/view.php?filename=41Screen_shot_2009_12_10.png)



dejo
Dec 10, 2009, 12:24 PM
[[Reachability sharedReachability] setHostName:@"www.google.com"]
First off, Reachability has no class method named sharedReachability.

uaecasher
Dec 10, 2009, 01:22 PM
First off, Reachability has no class method named sharedReachability.

I was reading an old thread well not so old (june 2009) and found it:

http://www.iphonedevsdk.com/forum/iphone-sdk-development/19546-no-wifi-connection-best-practice.html

could you tell me how to correct it?, I tired to look for similar code but didn't find any.

Thanks

dejo
Dec 10, 2009, 01:32 PM
I was reading an old thread well not so old (june 2009) and found it:

http://www.iphonedevsdk.com/forum/iphone-sdk-development/19546-no-wifi-connection-best-practice.html
Make sure you've read the entire thread, especially post #29 (http://www.iphonedevsdk.com/forum/iphone-sdk-development/19546-no-wifi-connection-best-practice-2.html#post118631).

uaecasher
Dec 10, 2009, 01:51 PM
Make sure you've read the entire thread, especially post #29 (http://www.iphonedevsdk.com/forum/iphone-sdk-development/19546-no-wifi-connection-best-practice-2.html#post118631).

sorry about that, thing is it's almost mid-night here and I didn't notice the 2nd page and most developers are open at this time.


Anyway it works now, but got a question: I'm using google.com as check as it's the most uptime website in the internet but sometimes there is network errors only in specific countries i.e google would not open in x country. Would this problem give the error massage or not.

Thanks