Loading presentation...

Present Remotely

Send the link below via email or IM

Copy

Present to your audience

Start remote presentation

  • Invited audience members will follow you as you navigate and present
  • People invited to a presentation do not need a Prezi account
  • This link expires 10 minutes after you close the presentation
  • A maximum of 30 users can follow your presentation
  • Learn more about this feature in our knowledge base article

Do you really want to delete this prezi?

Neither you, nor the coeditors you shared it with will be able to recover it again.

DeleteCancel

Make your likes visible on Facebook?

Connect your Facebook account to Prezi and let your likes appear on your timeline.
You can change this under Settings & Account at any time.

No, thanks

/dev/world/2012 - Programming for Mobility

Presentation delivered for the Apple Universities Consortium annual developer conference /dev/world in 2012.
by

Judit Klein

on 8 July 2013

Comments (0)

Please log in to add your comment.

Report abuse

Transcript of /dev/world/2012 - Programming for Mobility

Auckland University of Technology
New Zealand
25-26 September Rydges Bell City
/dev/world/2012
Judit Klein
Programming
for
Mobility
Redefinition
Modification
Augmentation
Substitution
Tech allows for the creation of new tasks, previously inconceivable.
Tech allows for significant task redesign.
Tech acts as a direct tool substitute, with functional improvement.
Tech acts as a direct tool substiture, with no functional change.
---------------------------------------------
Transformation
Enhancement
Agenda
CoreLocation API - standard service
- (void)startLocation
{
if (nil == locationManager)
locationManager = [[CLLocationManager alloc] init];

locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
locationManager.distanceFilter = 500;

[locationManager startUpdatingLocation];

}

-(void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
//do something
}
Desired Accuracy
Distance Filter
kCLLocationAccuracyBest
kCLLocationAccuracyNearestTenMeters
kCLLocationAccuracyHundredMeters
kCLLocationAccuracyKilometer
kCLLocationAccuracyThreeKilometers
10
10
10
10
10
Why?
Making your app context aware
Underlying technology
Code
Making your app context independent
Key considerations
Best Practices
kCLLocationAccuracyBestForNavigation
DEPRICATED
- (void)setUpLocation
{
if (nil == locationManager)
locationManager = [[CLLocationManager alloc] init];

locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyKilometer;
locationManager.distanceFilter = 500;

[locationManager startUpdatingLocation];
}

-(void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations
{
//do something
CLLocation* location = [locations lastObject];
NSLog(@"latitude %+.6f, longitude %+.6f\n",
location.coordinate.latitude,
location.coordinate.longitude);
}
CoreLocation API
Significant Change Service
- (void)setUpLocation
{
if (nil == locationManager)
locationManager = [[CLLocationManager alloc] init];

locationManager.delegate = self;
[locationManager startMonitoringSignificantLocationChanges];
}

-(void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations
{
//do something
CLLocation* location = [locations lastObject];
NSLog(@"latitude %+.6f, longitude %+.6f\n",
location.coordinate.latitude,
location.coordinate.longitude);
}
CoreLocation API - standard service
Region Monitoring
- (BOOL)registerRegionWithCircularOverlay:(MyCircle*)overlay andIdentifier:(NSString*)identifier
{
// create the coordinate for region overlay
CLLocationCoordinate2D autCoordinate=CLLocationCoordinate2DMake
(-36.84613, 174.766170);
int regionRadius=50;

// Create the region to monitor
CLRegion* region = [[CLRegion alloc]
initCircularRegionWithCenter:autCoordinate.coordinate
radius:regionRadius identifier:@"autRegion"];
[self.locManager startMonitoringForRegion:region];

[region release];

return YES;

}
What else can we do?
Direction related events:
Geocode:
MapKit
Other Hardware
Gyro
Compass
Accelerometer
Location Awareness
Find My Friends
(or their devices?)
Location
provides
CONTEXT
Mobile devices are
personal
Core Motion
framework
CMAccelerometerData
CMAttitude
CMDeviceMotion
CMGyroData
CMLogItem
CMMagnetometerData
CMMotionManager
But...
Welcome to the jungle:
The challenges of mobility.
Power
Networking
Mobile Data
Activity type
Offline experience
WiFi devices
Authorisation and Privacy
Portability = batteries
...is HARD.
...is expensive.
Helps you behind the scenes.
Running in the background
You probably don't need to...
Region monitoring
...makes it look like you are.
AutoPause
Decides when updates aren't beneficial.
Testing
Simulate location but do it in the real world too.
...are important too.
'Desired' accuracy
You're not always going to get it.
Hope for the best, plan for the worst.
The user is in control.
How?
SO
WHAT
?
Changing world
Place
Space
Location
Transformation
Globalised
World
Distance =/= KM
Time
Data
Pixels
Virtual
Physical
VS
User
Experience
Magic.
Summing
up
Location provides context
Mobility enables new use cases
CoreLocation API
Challenges of the mobile world
Location Awareness Programming Guide
http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/LocationAwarenessPG/Introduction/Introduction.html
WWDC 2012
Staying on Track with Location Services
WWDC 2010
Network Apps for iPhone OS, Part 1
Network Apps for iPhone OS, Part 2
@juditk
WWDC 2011
Testing Your Location-Aware App Without Leaving Your Chair.
- where is the user?
- where is the user?
- where is the user?
- tell me when the user enters / leaves a region
- Orientation of the device relative to north
- converts an address into a latitude / longitude value
Reverse Geocode:
- converts latitude / longitude value into an address.
- Display location information geographically.
How is the device being held and moved in 3D space?
Heading:
- Direction in which the device is moving
Course:
Full transcript