Imagine walking into a hotel room and having the temperature set just right, your favorite sub-genre of progressive-math-rock playing in the background, and the TV urging you to continue binging on your saved guilty-pleasures watchlist. What if your phone’s contact book could expand to merge with your spouse’s when you’re together, so you’re never again put in the excruciatingly compromising position of having to ask for your mother-in-law’s phone number (which you ought to have had on speed dial, in your favorites, and listed as an emergency contact)? Now imagine a world where you can drive up to an empty driveway or private parking space in a city like New York or San Francisco, and negotiate with that spaceto rent it out until its owner returns.
The common thread among all these scenarios is being able to detect proximity to — and being able to communicate with — people, places, and things “near” you.
At I/O this year, we spoke about a refresh to the Nearby Connections API that can provide high bandwidth, low latency, encrypted data transfers between nearby devices in a fully-offline P2P manner. Today we’re announcing the availability of this API across all Android devices running Google Play services 11.0 and up.
Nearby Connections uses WiFi, Bluetooth LE & Classic Bluetooth under the hood to discover and establish connections to nearby devices. It abstracts away the inherent complexity of these radios by leveraging the strengths of each, while circumventing their respective weaknesses. Aside from the obvious advantage of sidestepping the pain of dealing with the vagaries of these radios across different OS versions and devices, this abstraction enables seamlessly upgrading the bandwidth of a connection by switching between the radios as and when it makes sense, as well as getting invisible over-the-air updates to use new radio technology as it becomes available — with no change whatsoever in the application code.
At the heart of this API is a connection (with Unix-socket-like semantics) that you can use to transfer bytes, files, or streams of data. There are two supported connection topologies:
- Star: Useful for creating 1:N topologies where there’s a centralized device that others are especially interested in. For example, the host of an offline game, or the teacher’s device in a classroom quiz app.
- Cluster: Useful for creating M:N topologies that allow for creating looser mesh-like networks. For example, a classroom app that supports forming ad-hoc project groups for realtime collaboration, or an offline hyper-proximity-based chat app.
As a part of the process of building this API we worked with a few partners, each with unique offline-data-transfer needs and environments. It’s been great to see what they’ve built on top of early versions of this API, and their feedback has been invaluable in guiding us towards today’s launch. Take a look at some of the cool things they’re building:
- The Weather Channel is building on-demand mesh networks in data-deficient areas to spread urgent weather warnings.
- Hotstar enables offline media sharing in places with spotty/no internet connectivity (like on public transportation, airplanes, etc.)
- GameInsight is using Nearby Connections to not only find nearby players, but also to run entire games offline.
- Android TV is building a remote control app (powered by Nearby Connections) to simplify initial setup, and to enable subsequent second screen experiences.
Now that the API is publicly available, we can’t wait to see how you will use Nearby Connections in your applications. To get started, visit our developer site, check our code samples, and post any questions you have on Stackoverflow (tagged with google-nearby). To stay up to date on the latest Android Nearby offerings (and our other Context-related APIs), please subscribe to our mailing list.