Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
June2013 Meetup : IO13 Deep Dive-Location_api_AmritSanjeev
1. IO13 Deep Dive - Location API
Technical deep dive
What’s new in Location API
Amrit Sanjeev
Bangalore Android User Group
2. What’s on the agenda today ?
Let go and find where our users are
1Before the
new API
2New APIs
3How is it
implmented
3. Before the new API
Things to keep in mind before you create your world using LBS
1
4. Some interesting stats
• people
where
aware
of
LBS
63%
• report
having
used
LBS
52%
• thought
it
was
valuable
94%
• expressed
concerns
52%
• 32% use it every month
• 10% use it every day
• 18% tell others their location
• Expose location without consent 84%
• Identity theft 84%
• Loss of privacy 84%
5. LBS : Aspects to work on
LBS
Control
(Legal)
Trust
(Social)
Privacy
(Ethical)
Security
(Technolog
ical)
11. API : Fused Location Provider
Power
Accuracy
Coverage
12. API : Fused Location Provider
Before
AEer
• Simplified API
• 3 main aspects than was worked on
• Speed
• Accuracy
• Coverge
13. Major Changes
Abstracts the use and
switching between
different hardware
based on availability .
Simpler API and
workflow
Better battery
performance
Better average
accuracy
Support for both
listeners and pending
intents
14. Workflow – with listeners
• Create a instance of location client
locationClient = new LocationClient();!
!
• Call connect on it
locationClient.connect();!
!
• Get the last location if required by your logic
Location loc = locationClient.getLastLocation();!
!
• Create a location request
LocationRequest request = new LocationRequest();!
request.setInterval(5000);!
request.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);!
• Request of location updates passing the request and listener
locationClient.requestLocationUpdates(request, listener);!
15. Workflow – with pending intent
• Create a pending intent
PendingIntent pIntent = PendingIntent.getService(…);!
• Request of location updates passing the
request and listener
locationClient.requestLocationUpdates(request, listener);!
!
• Write code to handle the intent
Public void onHandleIntent(Intent intent);!
!
17. GeoFencing – What and why
Virtual fence around a
area that can be defined
to get updates of users
entering and exiting
Register 100 geofences in
one app
Simple api for adding and
removing geofences
Adjusts location updates
based on user’s proximity
to the geofence and user’s
activity (still, walking,
driving, and so on).
Roughly 2/3 power saving
compared to proximity
alert
18. Workflow
• Create a instance of location client
locationClient = new LocationClient();!
• In onConnected() callback , create a geofence object
Geofence.Builder gBuilder = new Geofence.Builder();!
gBuilder.setTransitionType(…);!
gBuilder.setCircularRegion(lat, long , radius);!
gBuilder.setExpirationDuration(duration);!
GeoFence gFence =gBuilder.build();!
!
• Add geofences to the locationclient
locationClient.addGeoFences(List<GeoFences> ,
Pending Intent ,… );!
19. Advantages
• Reduces power usage
• System calls the pending intent to wake your
application .
• Entry or exit areas
21. Workflow
• Create an activity recognition client
ActivityRecognitionClient aClient = new
ActivityRecognitionClient(…);!
• Connect the client
aClient.connect();!
!
• Request for activity updates
aClient.requestActivityUpdates(interval , callbackIntent)!
!
• Use onHandleIntent to get the calllback and extract
the activity type .
ActivityRecognitionResult result =
ActivityRecognitionResult.extractResult(intent);!
DetectedActivity act = result.getMostProbableActivity();!
!
!
23. Distribution channel
Google play
services channel
Backward
Compactible to
Froyo
Enhance APIs for
indoor mapping
Auto update and
faster release cycles
for new features
Improve accuracy
using new tech like
BT4.0 and 802.11v