Skip to content

Implementations of some Android Auto features as unofficial IDrive apps

License

Notifications You must be signed in to change notification settings

BimmerGestalt/AAIdrive

Repository files navigation

AAIdrive

Build Status Code Coverage Crowdin Release Download Gitter Buy Me A Coffee MIT Licensed

Get it on Google Play

The BMW/Mini IDrive NBT does not offer native Android Auto integration, but does provide a very powerful Connected Apps convergence option with tight integration points into the car. This project is an effort to implement most of the features of Android Auto as unofficial BMW/Mini Connected Apps.

By relying on the Connected Apps technology, this app greatly extends the functionality of the car without any modifications or hacks. Any MY2014 or newer BMW or Mini equipped with NBT or NBT Evo and the "BMW Apps (6NR)" feature, an active BMW ConnectedDrive subscription, or the "Mini Connected (SA6NM)" option should be compatible.

App List
Gallery

Overview

As part of the Connected Apps feature, when the phone connects to the car over USB (or Bluetooth in 2017+ models), enabled phone apps can show a special dashboard-optimized interface in the car.

AAIdrive, combined with the safety benefits of the tactile IDrive controller, builds on this protocol to allow the user to interact with their incoming notifications and control their phone's music while the phone is safely tucked away.

Getting Started

This app requires that the MyBMW or MINI app for your car is installed and that it can successfully enable your ID5+ car's Apps checkbox, or if your ID4 car has the Connection Assistant option.

Download the APK of the latest stable release from the Releases page. Choose the one that says "sentry" to automatically upload crash reports, or choose "nonalytics" otherwise. It is also available on the Google Play Store. After starting, the app should detect the MyBMW app and start waiting for the car connection.

Also consider trying out the nightly build! It has the latest features and is a preview of the next release, so please consider installing the Sentry build to automatically report crashes. The nonalytics build is available too.

Check out the FAQ if you run into problems.

User Guide

Phone Connection

After connecting the phone to the car, the official MyBMW app should show this car icon in the status bar. When this icon appears, this app should connect and add its functionality to the car.

See this guide for tips on improving the connection reliability of the MyBMW app.

Phone App List

After all the apps are connected, a bunch of new entries will show up in the car's Connected menu. There should be a new Audioplayer or Spotify icon and a book icon with no label. This book icon is the Notifications app, if enabled.

Music App List

Several new entries will be added to the Media section of the control screen. The Audioplayer icon is the one with the main functionality, while the other displayed apps above the Audioplayer are quick shortcuts to switch playback to the respective apps. This screenshot also shows the legacy Spotify app at the bottom of the list.

Development Status

AAIdrive is feature-complete, implementing as many Android Auto features as are possible within the BMW app system, and several more. Beyond the occasional maintenance patch, this project is complete and won't see any more development.

Implemented Features

Integration Points

Besides showing a self-contained remote UI, the IDrive system offers many exciting integration points. Here are a few that this project supports:

  • The UI widgets automatically take on the respective theme to fit the car
  • The Assistants, Map View, Notification List, and Music Playback screens can be assigned to the physical shortcut buttons in the dashboard
  • Car information is retained after disconnect, such as window status and parked location
  • New notifications trigger a statusbar icon
  • New notifications can trigger a popup
  • New notification popups can be disabled if a passenger is detected in the seat
  • Notifications can be read out by the car's TTS when received or when selected
  • The car's navigation system is available to handle Android Navigation Intents
  • The car's location and heading is shown in the custom map
  • The currently-playing app is displayed along the top of the IDrive screen
  • The currently-playing song title is shown in the IDrive4 Multimedia side panel
  • The currently-playing song coverart and progress is shown in the IDrive5+ Home screen and Multimedia side panel
  • On a MY2017+ car supporting Bluetooth Apps, audio focus will be enabled which grants the following extra features:
    • The Media shortcut button opens this app when it is in control of the music
    • Automatically resumes playback when reconnecting to the car
    • Playback pauses when pushing the mute button or during calls
    • The physical back/next buttons can be held down to seek within a track or pressed to skip tracks
    • The steering wheel controls can skip tracks from the instrument cluster
    • Enqueued songs can be scrolled in the instrument cluster, depending on app support

Limitations

This project replicates some of the features of Android Auto using the IDrive interface, using the same APIs that Android Auto uses to talk to the music apps. It cannot currently provide more advanced Android Auto features, such as:

  • Integration with the car's Voice Assistant button
  • Screen-casting of arbitrary phone apps to the car (Google Maps, Waze, or any other apps)
  • Displaying the original Android Auto interface at all

Due to the unofficial reverse-engineered nature of this project, it has some limitations:

  • The main menu entries' icons and text can't be altered, and so do not look exactly correct
  • The individual music source icons sometimes don't open the Audioplayer interface in ID4, but they do switch the active music source
  • Android Oreo disabled Android Open Accessory Protocol 2 audio output, which is required to play audio over the app's USB connection in model years 2014-2017. Please listen over Bluetooth audio and use this app as a control interface.
  • Some Android Auto music apps enforce a list of allowed client apps, preventing this app from launching them or browsing their libraries. However, once they are running, they can be controlled. For example, these popular music apps can not be launched, they must be started manually:
    • Amazon Music
    • Audible
    • Bandcamp
    • CloudPlayer
    • Deezer
    • doubleTwist
    • Google Play Music
    • iHeartAuto
    • TuneIn Radio
    • Pandora
    • Scribd
    • Smart Audiobook Player
    • YouTube Music

Requirements

To communicate to the car, this project relies on the proxy connection that is created by the main MyBMW or Mini app on the phone. Additionally, the legacy Connected and the Connected Classic apps have been tested as compatible for this purpose, but the Connected app is more resilient against Android's memory management.

Developer Guide

To build your own test versions of the app and help contribute to the project, follow this Developer Guide to set up your development environment.

Privacy

This project contains no advertising or user tracking, and is developed entirely for fun and to enhance the usefulness of the BMW/Mini infotainment system.

The app uses the Internet Permission to make a TCP connection to the car, which is reachable through a localhost socket on the main Connected app. Additionally, some cover art and incoming picture notifications (such as from Hangouts) may be fetched from Internet URLs. No other Internet access is required for the app's functionality.

As part of its functionality, the app collects and remembers some information locally on your phone:

  • The Car Information tab remembers information about the most-recently-connected car, including model and available features, specific driving statistics and vehicle settings, and the last location reported by the car while it was connected
  • The music functionality remembers a list of installed music apps and what features they provide
  • The Spotify integration retains a token to access your Spotify Library

The app also needs some other information to function, but does not remember any of it and will never share it:

  • To establish the car connection, the app identifies which BMW and Mini apps are installed
  • The app watches Bluetooth connections to identify when the car is connected
  • Any installed Voice Assistants are discovered to be added to the car
  • Apps which act as AAIdrive Addons are discovered and presented in the Addons tab
  • If enabled, notifications are read from the phone while connected to the car and then forgotten when disconnected
  • If compiled into the app and then enabled, the custom map feature will use the car or phone's location while displaying the map

The analytics-disabled version will never share any information, and no analytics code is compiled into this version of the app. The analytics-enabled version provides an option to share some anonymized information to Sentry to assist with debugging and development: If enabled, besides any rare and unfortunate crashes, the app will share any installed music apps and the capabilities each app provides, as well as the model and capabilities of any connected car for usage statistics and feature prioritization.

Each release provides both an analytics-enabled and analytics-disabled option.

Example Analytics Data

Music App

{
  "appId": "github.daneren2005.dsub",
  "appName": "DSub",
  "controllable": "false",
  "connectable": "true",
  "browseable": "true",
  "searchable": "false",
  "playsearchable": "false"
}

Car Connection

{
  "a4axl": "true",
  "alignment_right": "true",
  "hmi_display_height": "480",
  "hmi_display_width": "1280",
  "hmi_role": "HU",
  "hmi_type": "MINI ID5",
  "hmi_version": "EntryEvo_ID5_1903_Release ID5_1903-490-1837K Build 47 - Rev:203015 2018-11-14 08:39:42",
  "inbox": "true",
  "map": "true",
  "navi": "true",
  "pia": "true",
  "speech2text": "true",
  "speedlock": "true",
  "touch_command": "false",
  "tts": "true",
  "vehicle_country": "US",
  "vehicle_productiondate": "03.00",
  "vehicle_type": "F56",
  "voice": "false"
}