Home > Open Source > Device Detection
Device Detection
Posted on Tuesday, May 19, 2009 by android apps market for tablests
Update: The author of the device detection code has been identified! Max Horv�th dropped me a note letting me know that this lovely little bit of code was written by him. He's got a great blog that often covers iPhone SDK material also.Somebody asked me over Twitter for how to detect what device the code was running on. Since a tree fell in my backyard the other day, right on the telephone lines and taking out my internet service in the process, I was working on an iPhone, and trying to answer a question quickly.
In short, I gave a wrong answer. My apologies to anybody who relied on it.
Here's some code, written by Max Horv�th, that detects the device model correctly.
#import <sys/utsname.h>
enum {
MODEL_IPHONE_SIMULATOR,
MODEL_IPOD_TOUCH,
MODEL_IPHONE,
MODEL_IPHONE_3G
};
@interface DeviceDetection : NSObject
+ (uint) detectDevice;
+ (NSString *) returnDeviceName:(BOOL)ignoreSimulator;
@end
@implementation DeviceDetection
+ (uint) detectDevice {
NSString *model= [[UIDevice currentDevice] model];
// Some iPod Touch return "iPod Touch", others just "iPod"
NSString *iPodTouch = @"iPod Touch";
NSString *iPodTouchLowerCase = @"iPod touch";
NSString *iPodTouchShort = @"iPod";
NSString *iPhoneSimulator = @"iPhone Simulator";
uint detected;
if ([model compare:iPhoneSimulator] == NSOrderedSame) {
// iPhone simulator
detected = MODEL_IPHONE_SIMULATOR;
} else if ([model compare:iPodTouch] == NSOrderedSame) {
// iPod Touch
detected = MODEL_IPOD_TOUCH;
} else if ([model compare:iPodTouchLowerCase] == NSOrderedSame) {
// iPod Touch
detected = MODEL_IPOD_TOUCH;
} else if ([model compare:iPodTouchShort] == NSOrderedSame) {
// iPod Touch
detected = MODEL_IPOD_TOUCH;
} else {
// Could be an iPhone V1 or iPhone 3G (model should be "iPhone")
struct utsname u;
// u.machine could be "i386" for the simulator, "iPod1,1" on iPod Touch, "iPhone1,1" on iPhone V1 & "iPhone1,2" on iPhone3G
uname(&u);
if (!strcmp(u.machine, "iPhone1,1")) {
detected = MODEL_IPHONE;
} else {
detected = MODEL_IPHONE_3G;
}
}
return detected;
}
+ (NSString *) returnDeviceName:(BOOL)ignoreSimulator {
NSString *returnValue = @"Unknown";
switch ([DeviceDetection detectDevice]) {
case MODEL_IPHONE_SIMULATOR:
if (ignoreSimulator) {
returnValue = @"iPhone 3G";
} else {
returnValue = @"iPhone Simulator";
}
break;
case MODEL_IPOD_TOUCH:
returnValue = @"iPod Touch";
break;
case MODEL_IPHONE:
returnValue = @"iPhone";
break;
case MODEL_IPHONE_3G:
returnValue = @"iPhone 3G";
break;
default:
break;
}
return returnValue;
}
@end
Category Article Open Source
Powered by Blogger.
Blog Archive
-
▼
2009
(496)
-
▼
May
(55)
- Another List for WWDC First-Timers
- Nearby Intersections on GOOG-411
- Nearby Intersections on GOOG-411
- Part 6
- WWDC Session Data Now Available at Attendee Site
- WWDC Session Data is Gone
- WWDC JSON Credit
- Another iCal Script
- WWDC Session Times for iCal Import
- Better Session Script
- WWDC Session Times
- Another Party, RSVP Required
- Multitouch on a MacBook
- Yet Another WWDC Party List
- OpenGL ES From the Ground Up, Part 6: Textures and...
- Mini Picture Sudoku Gadget
- Wolf Shirt Update
- Wolf Shirts
- Concurrent Operations (aka Threading)
- Google Sync Beta - Now for S60
- Google Sync Beta - Now for S60
- WWDC Party List
- Device Detection
- Yahoo Limits Mobile Development to One Platform
- iPhone Intelligence Party
- The Iterative Web App - Gmail for Mobile Gets Labels
- The Iterative Web App - Gmail for Mobile Gets Labels
- Nokia N Series: Highly innovated devices
- Meet the Nokia N97 and its smartphone rivals
- Just for the Record
- Feed Changes
- Dick Move - iwyre.net
- Google Product Search for Android now with Barcode...
- Google Product Search for Android now with Barcode...
- WWDC First Timer's Guide Redux
- OpenGL ES From the Ground Up, Part 5: Living in a ...
- Behind the scenes of the NYC - Google mapping part...
- Behind the scenes of the NYC - Google mapping part...
- No Steve-Note
- Sky Map for Android - A Mobile Planetarium
- Sky Map for Android - A Mobile Planetarium
- GoGadget
- Cheeky Quote Gadget
- YouTube uploads and more now available on Android
- YouTube uploads and more now available on Android
- Procedural Spheres in OpenGL ES
- New BlackBerry Enterprise Server Packages for Goog...
- New BlackBerry Enterprise Server Packages for Goog...
- Use Google Apps seamlessly with corporate BlackBer...
- Use Google Apps seamlessly with corporate BlackBer...
- Do more with Google Latitude!
- Do more with Google Latitude!
- OpenGL ES From the Ground Up, Part 1 Addendum: Alp...
- setupView: from Part IV Rewritten
- OpenGL ES From the Ground Up, Part 4: Let There Be...
-
▼
May
(55)