Expand Minimize Picture-in-picture Power Device Status Voice Recognition Skip Back Skip Forward Minus Plus Play Search
Documentation
Sidebar

Adaptive Interface Capabilities

Since each car manufacturer has different user interface style guidelines, the number of lines of text, soft and hard buttons, and images supported will vary between different types of head units. The system will send information to your app about its capabilities for various user interface elements. You should use this information to create the user interface of your SDL app.

You can access these properties on the sdlManager.getSystemCapabilityManager instance.

System Capability Manager Properties

Parameters Description
SystemCapabilityType.DISPLAYS Specifies display related information. The primary display will be the first element within the array. Windows within that display are different places that the app could be displayed (such as the main app window and various widget windows).
SystemCapabilityType.HMI_ZONE Specifies HMI Zones in the vehicle. There may be a HMI available for back seat passengers as well as front seat passengers.
SystemCapabilityType.SPEECH Contains information about TTS capabilities on the SDL platform. Platforms may support text, SAPI phonemes, LH PLUS phonemes, pre-recorded speech, and silence.
prerecordedSpeechCapabilities Currently only available in the SDL_iOS library
SystemCapabilityType.VOICE_RECOGNITION The voice-recognition capabilities of the connected SDL platform. The platform may be able to recognize spoken text in the current language.
SystemCapabilityType.AUDIO_PASSTHROUGH Describes the sampling rate, bits per sample, and audio types available.
SystemCapabilityType.PCM_STREAMING Describes different audio type configurations for the audio PCM stream service, e.g. {8kHz,8-bit,PCM}.
SystemCapabilityType.HMI Returns whether or not the app can support built-in navigation and phone calls.
SystemCapabilityType.APP_SERVICES Describes the capabilities of app services including what service types are supported and the current state of services.
SystemCapabilityType.NAVIGATION Describes the built-in vehicle navigation system's APIs.
SystemCapabilityType.PHONE_CALL Describes the built-in phone calling capabilities of the IVI system.
SystemCapabilityType.VIDEO_STREAMING Describes the abilities of the head unit to video stream projection applications.
SystemCapabilityType.REMOTE_CONTROL Describes the abilities of an app to control built-in aspects of the IVI system.

Deprecated Properties

The following properties are deprecated on SDL Android 4.10 because as of RPC v6.0 they are deprecated. However, these properties will still be filled with information. When connected on RPC <6.0, the information will be exactly the same as what is returned in the RegisterAppInterfaceResponse and SetDisplayLayoutResponse. However, if connected on RPC >6.0, the information will be converted from the newer-style display information, which means that some information will not be available.

Parameters Description
SystemCapabilityType.DISPLAY Information about the HMI display. This includes information about available templates, whether or not graphics are supported, and a list of all text fields and the max number of characters allowed in each text field.
SystemCapabilityType.BUTTON A list of available buttons and whether the buttons support long, short and up-down presses.
SystemCapabilityType.SOFTBUTTON A list of available soft buttons and whether the button support images. Also, information about whether the button supports long, short and up-down presses.
SystemCapabilityType.PRESET_BANK If returned, the platform supports custom on-screen presets.

Image Specifics

Images may be formatted as PNG, JPEG, or BMP. You can find which image types and resolutions are supported using the system capability manager.

Since the head unit connection is often relatively slow (especially over Bluetooth), you should pay attention to the size of your images to ensure that they are not larger than they need to be. If an image is uploaded that is larger than the supported size, the image will be scaled down by Core.

ImageField field = sdlManager.getSystemCapabilityManager().getDefaultMainWindowCapability().getImageFields().get(<#index#>);
ImageResolution resolution = field.getImageResolution();

Example Image Sizes

Below is a table with example image sizes. Check the SystemCapabilityManager for the exact image sizes desired by the system you are connecting to. The connected system should be able to scale down larger sizes, but if the image you are sending is much larger than desired, then performance will be impacted.

ImageName Used in RPC Details Size Type
softButtonImage Show Image shown on softbuttons on the base screen 70x70px png, jpg, bmp
choiceImage CreateInteractionChoiceSet Image shown in the manual part of an performInteraction either big (ICON_ONLY) or small (LIST_ONLY) 70x70px png, jpg, bmp
choiceSecondaryImage CreateInteractionChoiceSet Image shown on the right side of an entry in (LIST_ONLY) performInteraction 35x35px png, jpg, bmp
vrHelpItem SetGlobalProperties Image shown during voice interaction 35x35px png, jpg, bmp
menuIcon SetGlobalProperties Image shown on the “More…” button 35x35px png, jpg, bmp
cmdIcon AddCommand Image shown for commands in the "More…" menu 35x35px png, jpg, bmp
appIcon SetAppIcon Image shown as Icon in the "Mobile Apps" menu 70x70px png, jpg, bmp
graphic Show Image shown on the basescreen as cover art 185x185px png, jpg, bmp

Querying for System Capabilities

Most head units provide features that your app can use: making and receiving phone calls, an embedded navigation system, video and audio streaming, as well as supporting app services. To find out if the head unit supports a feature as well as more information about the feature, use the SystemCapabilityManager to query the head unit for the desired capability. If a capability is unavailable, the query will return null.

sdlManager.getSystemCapabilityManager().getCapability(SystemCapabilityType.APP_SERVICES, new OnSystemCapabilityListener() {
    @Override
    public void onCapabilityRetrieved(Object capability) {
        AppServicesCapabilities servicesCapabilities = (AppServicesCapabilities) capability;
    }

    @Override
    public void onError(String info) {
        <# Handle Error #>
    }
});

Subscribing to System Capabilities

In addition getting the current system capabilities, it is also possible to subscribe for updates when the head unit capabilities change. Since this information must be queried from Core you must implement the OnSystemCapabilityListener. This feature is only available RPC v5.1 or greater connections (except for DISPLAYS, which is backward compatible to RPC v1.0).

Subscribe to a Capability

sdlManager.getSystemCapabilityManager().addOnSystemCapabilityListener(SystemCapabilityType.APP_SERVICES, new OnSystemCapabilityListener() {
    @Override
    public void onCapabilityRetrieved(Object capability) {
        AppServicesCapabilities servicesCapabilities = (AppServicesCapabilities) capability;
    }

    @Override
    public void onError(String info) {
        <# Handle Error #>
    }
});

GetSystemCapability getSystemCapability = new GetSystemCapability();
getSystemCapability.setSystemCapabilityType(SystemCapabilityType.APP_SERVICES);
getSystemCapability.setSubscribe(true);
sdlManager.sendRPC(getSystemCapability);
View on GitHub.com
Previous Section Next Section