Inspiration

Typing on a cramped on-screen keyboard on a touchscreen phone is never a pleasant experience. People have been exploring alternative ways to input text on mobile devices, but the speed and comfort of typing on a full-sized keyboard is unparalleled. Thus, the need for bluetooth keyboards has always been strong.

However, there are times when we don't have access to an external keyboard for our phones. Many of us have been stuck with public "printing stations" locked down with nothing but a web browser before, and even places where there is neither Wi-Fi or cellular. When others are trying to devise network-based apps to input text remotely, we turn to the sound waves around us.

And here we are, 24 hours later. Say hello to AirBoard.

What it does

Instead of relying on Wi-Fi or Bluetooth, AirBoard mirrors what you type on a web browser to your phone, with nothing but ultrasonic waves. All you need to type comfortably is to install the AirBoard IME on your Android device, and open a webpage on a computer. The webpage listens to keypresses and emit modulated ultrasonic waves imperceptible to human ear, which are then received by the Android keyboard.

As we built an Android input method, you are not locked into a specific application to input your text. Simply open the app you prefer, and type away with the comfort of a full-sized keyboard.

How we built it

To send and receive ultrasonic soundwaves, we used libquiet and their JavaScript and Java bindings. We built a HTML5 page to listen to keystrokes and emit ultrasonic (or audible when configured) waves. Most of our time was spent coding up our custom Android keyboard. We adapted our keyboard to different apps, so keys like Return and arrow keys work correctly in different situations.

Challenges we ran into

We encountered difficulty making our custom input method on Android. Having no experience in Android development, we spent time getting accustomed to the Android APIs, which felt entirely different for some of our teammates who have prior experience writing desktop apps in Java.

Most of our time was spent debugging the receiver routine in our IME. We tried different approaches to set up libquiet for receiving, with some squatting microphone access even when the keyboard isn't visible.

Accomplishments that we're proud of

We figured out why the observer didn't work. After carefully reviewing the android documentation and rxjava documentation, we guessed that maybe the initialization of the observer is wrongly placed. A lot more trials and errors later, we finally made it work!

What we learned

We have learned a lot during the process. Being beginners to Android development, we spent a great deal of our time learning Android. We also tried our hands on the concept of transmitting data with sound, which seems difficult at first.

What's next for AirBoard

AirBoard will be better and better over time. As our first step, we are planning to clean up our code after the hackathon and actually release AirBoard as a free and open-source project.

Share this project:

Updates