Communicating with Android devices
Who am I
Sr. Software Developer At RedHat
Georgia Native
Ajug Emeritus
RHMAP Community Liaison (Jan 1)
About This Talk
How to get data to Android Devices
Slight bias toward stock Android APIs
On Demand Refresh
Loaders, AsyncTask, Services
Doing Polling Right
It has a bad reputation
FCM with RHMAP
If you can use FCM use FCM
Other Options for Real Time
Socket and event based
Data on Demand
Refresh data from a server
One option for older systems
Gives uses controls
Data on Demand
AsyncTask
Gets Network access off the main task
Good for one shot options
Interacts badly with the activity lifecycle
Data on Demand
Loaders
Gets Network access off the main thread
Tightly coupled with Activity lifecycle
More nuanced than Async Task
Data on Demand
Services
Gets Network access off the main Activity
No coupling with Activity Lifecycle
More exposure to Android system
Data on Demand
Cat Facts Demo
https://github.com/secondsun/CatFacts
Polling
The device will connect to a remote server on a schedule
Bad for battery, often unnecessary
Lots of cases to handle
Lots of libraries to help
Polling
Job Scheduler
Android 21 API
Schedules all periodic tasks based on their needs
Networking
Power
etc
Compatibility API in Firebase
JobDispatcher
Polling
Other Options
Roll your own
Be aware of battery
Be aware of back-off
Don't overload server
Handle retries
Reschedule around network/power availability
Won't cooperate across apps
Evernote
https://github.com/evernote/android-job
Polling
Other Options
Hijack AlarmManager
Google's engineers say just use Firebase instead
Hijack SyncAdapters
May be better if you need deeper integration with Android
Has great integration with Android Authentication system
Really complex
Polling
Demo - Weather Poller
https://github.com/secondsun/PollingDemo
Push Notifications
Server notifies devices when data changes
Asynchronous messaging via Google's services
Firebase Cloud Messaging
These messages may send up to 4k of data
If data is too large, use push to sync
Schedule a job with the JobScheduler
Push Notifications
If you can't use Google Play Services...
Amazon Kindle Devices have their own protocol
Requires Server support
Older servers may need updates
May need to write bridges to connect to legacy servers
Push Notifications
Demo!
Github Star Notifications
Other Options
For all the other ways to get data to your device
Other Options
Don't
If your app is brochure-ware just ship it
Cordova can help by packaging a static website into a apk
Other Options
[Web|BSD]Sockets
BSD Sockets work just like they do in Java SE
Might need ports open in firewalls
Might not work with VPS
WebSocket libraries vary in quality and features
Works over HTTP
Easy SSL
Works in browsers / cross platform
Netty Demo
Questions?
Made with Slides.com