The new Android Auto APIs bring the Android experience in to your car. Android Auto automatically surfaces you useful information and organises it into simple cards that appear just when they're needed. You get notifications about messages on your phone messages, and can play media or browse your phone's content. More information about it here.
Our local Google Developer Expert Paul Blundell and London Google Developer Expert David González will lead an Android Auto practical hands on code lab, where you will learn how to add Android Auto compatibility to an Android messaging app.
What you’ll learn:
- Extend a notification so that it also shows in your car
- Handle the user replying to this notification
The event will take the form of a guided workshop where we will walk you through the code to create this Android application explaining along the way how the different Android SDK parts work and answering any questions you may have. You will have the chance to pair program (or on your own is ok to!) and to try out your code on a real Android Auto demo unit, not only in the emulator!
Difficulty level: beginner
Prerequisites:
- Laptop with Android Studio and Android SDK preinstalled (or turn up and pair)
- Have git installed to checkout the starting code
- A sense of adventure
2. What you’ll learn
Android programming
Extend a notification so that it also shows on the car
Handle the user replying to your notification message
3. What you’ll need
Android Studio version 1.0+
The sample code
A test device with Android Lollipop (5.0+)
An Android Auto compatible head unit
or the Android Auto Messaging Simulator
4. Get the sample code
git clone https://github.com/novoda/dojos.git
or download source http://surl.novoda.com/auto-code
The folder is: The module is:
/androidauto-messaging /base
5. Import the sample app
First, we will bootstrap with a very basic messaging app that simply creates a
notification.
1. Open Android Studio
2. Select the androidauto-messaging/base directory from the code folder
(File > Import Project… > androidauto-messaging/base).
1. Click the Android Studio Run button.
6. What does this app do?
● Clicking button sends a notification after 15 seconds
● IntentService - this is used to do work in the background
● Create a Notification using NotificationCompat.Builder
● Add an on-click action to the notification
7. Extending a Notification for Android
AutoCreate a new file "res/xml/automotive_app_desc.xml":
Right click in the "res" folder and select File -> New -> Android Resource File
8. Extending a Notification for Android
AutoThen fill the dialog with the following info:
File name: automotive_app_desc
Resource type: XML
Root element: automotiveApp
9. Extending a Notification for Android
AutoReplace the content of the file you just created with the following content. This
declares that the application is using the Android Auto Messaging API.
<?xml version="1.0" encoding="utf-8"?>
<automotiveApp>
<uses name="notification"/>
</automotiveApp>
code-help-1.txt
10. Extending a Notification for Android
AutoEdit AndroidManifest.xml and include the following meta-data inside the
application tag:
<meta-data
android:name="com.google.android.gms.car.application"
android:resource="@xml/automotive_app_desc" />
code-help-2.txt
11. Extending a Notification for Android
AutoOpen MessagingService.java and add the code to create an
UnreadConversation object. Paste the following code (code-help-3.txt) in the
method sendNotificationForConversation(..), within the delimiter comments.
This is where we type:
/// Add the code to create the UnreadConversation
/// End create UnreadConversation
code-help-3.txt
12. Extending a Notification for Android
AutoOpen MessagingService.java. Locate the line where it creates the notification
and extend it with a CarExtender
/// Extend the notification with CarExtender.
.extend(new
CarExtender().setUnreadConversation(unreadConversationBuilder.build()))
/// End extend the notification with CarExtender
code-help-4.txt
13. Run the new code
Click the Android Studio Run button (or press shift+F10).
The app looks the same, but now the notification created by it will show up on
Android Auto.
15. Test on Android Auto
SimulatorInstall the Android Messaging simulator
(<sdk>/extras/google/simulators/messaging-simulator.apk) on your
phone/tablet.
$ adb install messaging-simulator.apk
Enable the simulator to read notifications posted on the system:
Enable developer options.
Settings > Sounds & Notifications > Notification Access and check the box
labeled Messaging Simulator.
16. Take Aways
● To be seen on Android Auto, notifications need to be extended with a
CarExtender
o this is in the support v4 library
● Extended notifications also show on the phone regardless of whether
Android Auto is connected or not, so you can support Android Auto
seamlessly without needing to know when the user is connected to the car
● Android Auto only supports notifications from messaging apps. This is
enforced by the Play Store review process
17. Congratulations
The messaging API is intentionally simple and builds on top of the existing
Android Notification API, requiring minimal effort from developers.
18. References
Developer.Android getting started with Android Auto
Android Auto & ubiquitous computing Udacity course
Making an Android Auto demo unit
Google IO code lab example
Android Auto notifications DevByte video
Android Auto help page
Notes de l'éditeur
There is nothing much to play with except clicking on the button and seeing the notification after 15 seconds. For now, ignore the message about plugging your phone to Android Auto. If you plug your phone into the car (or run the simulator), you won't see the notification. That's because a notification needs to be extended in order to show up on the car's head unit. Let's learn how to do it in the next step.
Note: A typical messaging app would post a notification and let the user click on the notification and reply to the message. We instead kept the phone UI to the minimum, so you can focus on the Android Auto integration.
As you've seen in the previous step, not all notifications will show on an Android Auto head unit. To be seen on Android Auto, a notification needs to be related to a messaging app and be augmented with a CarExtender from support library v4. First, to be recognized as a messaging app for Android Auto, we need to make an explicit declaration in our AndroidManifest.xml.
Understand what you are doing
In Android Auto, the only way for a user to send messages is via voice. Messages are read out by Android Auto and user replies are converted from speech to text. The reply text is then sent to the messaging app as part of aRemoteInput in the UnreadConversation. See MessageReplyReceiver to understand how this is used.
A "read" PendingIntent is triggered when the user listens to the message. The receiver code cancels the notification. A "reply" PendingIntent is triggered when the user replies to the message.
The UnreadConversation object contains a list of messages from oldest to newest. It also holds references to the "read" and "reply" PendingIntents and the RemoteInput associated with it.
Finally, a CarExtender is used to attach the UnreadConversation to a NotificationCompat.
Important: For safety reasons, Android Auto does not run side-loaded apps. If you are running this codelab at Google I/O, you don't need to worry because you are using special devices. But if you use other devices, you will need to submit your app to Google Play Store and install from there. You can use the simulators while developing and the Play Store alpha channel to test on real devices before releasing.
If your app does not appear, stop the simulator from Settings > Apps then restart it.