If you're not familiar with Amazon Echo or its competitor Google Home by now, take a look around you. You're living in the future. We can now control things in our homes, get information and sports scores, or even order a pizza (well, more on that later) all by just asking Alexa.
This is interesting from a development perspective too, as Amazon has opened Alexa for developers, and Google will be opening Home for developers soon. This means not only can you develop your own skills to handle new Alexa requests not supported out of the box, but the community is able to communicate with Alexa directly from an Android app. The AlexaAndroid library is an open source library designed to let you do just that, and is much easier than working with the AVS API directly.
- Send Live Audio
- Send Prerecorded Audio
- Send Text Request
When I tried the live audio it did exactly what I expected. It let me press a button in the sample app to begin a request, and speak my request at my device. It then sent the request to Alexa, got a response and played the response. For instance I tapped the mic and said, "add eggs to my shopping list," which it was happy to do, responding, "I've added eggs to your shopping list." When I said, "I'd like to order a pizza," it thought I wanted to order it from Amazon, and tried to add the top result for "pizza" which was a "Pizazz." Of course, adding the Domino's skill from the companion app would have let me order pizza, but where's the fun in that?
Remember the eggs? Yes
Order a pizza? You wanted this, right?
Installing the Amazon Alexa companion app (seen above) on your device also lets you check the results of your queries, which is really useful for testing custom skills. Regardless, this function seems to work exactly as expected. When I did it in a noisy environment I had to tap the microphone again to end my request, but Alexa was able to process the request just as well as an Echo. That makes sense as the processing is all being done server side, though I suppose it could vary based on the quality of the microphone on the Android device you're using.
Beyond allowing a user to talk with Alexa within your own app, the voice recording feature doesn't seem to add much to your app. The response you get simply has audio which you can play, so getting your app to do something with that result requires a lot of extra work and access to the skill you're trying to use to provide an alternate method of tracking its state.
Sending prerecorded audio to Alexa allows your users to press a button or interact with your app in other ways to send Alexa a command. Just record the commands you're interested in using ahead of time and send them using the prerecorded audio function. Again, the result you get isn't very helpful to an app developer yet - all you can really do is play it.
The sample app sends "Tell me a joke" for prerecorded audio and lets you press the button to get Alexa to tell a joke. It makes it easy to see if you're developing an app that utilizes a custom skill you've developed how you could make use of Alexa as a component of your app.
This accomplishes the same end as prerecorded audio without including audio files with your app, and allowing more dynamic and flexible requests. It actually uses Android text to speech to speak the audio at Alexa, so again it's really using the same interface adding a convenience layer. The requests also take longer and are less likely to succeed.
I entered, "What should we have for dinner?" and after about 5 seconds got the response "Pizza is always a good answer, but don't forget your vegetables."
Amazon's public API for Alexa is a step in the right direction for developers, and the AlexaAndroid library is one easy though limited way to use it in an Android app. For custom skills which need interactive apps along with Alexa voice interfaces, it may make more sense for the app to communicate with the backend directly rather than through the Alexa interface. It is hard to argue with the novelty factor of hearing the Alexa voice coming out of your phone though.
If you do try it out let us know how it goes! And keep in mind this open source library is licensed under the GPL 2.0, so use accordingly.