The Android 3.1 platform adds refinements and new capabilities that developers can build on, to create powerful and engaging application experiences on tablets and other large-screen devices.
Open Accessory API for rich interaction with peripherals
Android 3.1 introduces a new API for integrating hardware accessories with applications running on the platform. The API provides a way to interact across a wide range of peripherals, from robotics controllers to musical equipment, exercise bicycles, and more.
The API is based on a new USB (Universal Serial Bus) stack and services that are built into the platform. The platform provides services for discovering and identifying connected hardware, as well as for notifying interested applications that the hardware is available.
When a user plugs in a USB accessory, the platform receives identifying information such as product name, accessory type, manufacturer, and version. The platform sets up communication with the accessory and uses its information to notify and launch a targeted app, if one is available. Optionally, an accessory can provide a URL that lets users find and download an app that works with the accessory. These discovery features make first-time setup easier for the user and ensure that an appropriate application is available for interacting with the connected hardware.
For application developers and accessory manufacturers, accessory mode offers many new ways to engage users and build powerful interaction experiences with connected hardware.
To learn more about how to develop applications that interact with accessories, see the USB Accessory documentation.
USB host API
Android 3.1 provides built-in platform support for USB host mode and exposes an API that lets applications manage connected peripherals. On devices that support host mode, applications can use the API to identify and communicate with connected devices such as audio devices. input devices, communications devices, hubs, cameras, and more.
To learn more about how to develop applications that interact with USB devices, see the USB Host documentation.
Input from mice, joysticks, and gamepads
Android 3.1 extends the input event system to support a variety of new input sources and motion events, across all views and windows. Developers can build on these capabilities to let users interact with their applications using mice, trackballs, joysticks, gamepads, and other devices, in addition to keyboards and touchscreens.
For mouse and trackball input, the platform supports two new motion event actions: scroll (horizontal or vertical) such as from a scrollwheel; and hover, which reports the location of the mouse when no buttons are pressed. Applications can handle these events in any way needed.
For joysticks and gamepads, the platform provides a large number of motion axes that applications can use from a given input source, such as X, Y, Hat X, Hat Y, rotation, throttle, pressure, size, touch, tool, orientation, and others. Developers can also define custom axes if needed, to capture motion in additional ways. The platform provides motion events to applications as a batch, and applications can query the details of the movements included in the batch, for more efficient and precise handling of events.
Applications can query for the list of connected input devices and the motion ranges (axes) supported by each device. Applications can also handle multiple input and motion events from a single input device. For example, an application can use mouse and joystick and mouse event sources from a single input device.
Resizable Home screen widgets
Developers can now create Home screen widgets that users can resize horizontally, vertically, or both. By simply adding an attribute to the declaration of a widget, the widget becomes resizable horizontally, vertically, or both. This lets users customize the display of the widget content and display more of it on their Home screens.
MTP API for integrating with external cameras
In Android 3.1, a new MTP (Media Transfer Protocol) API lets developers write apps that interact directly with connected cameras and other PTP devices. The new API makes it easy for applications to receive notifications when devices are attached and removed, manage files and storage on those devices, and transfer files and metadata to and from them. The MTP API implements the PTP (Picture Transfer Protocol) subset of the MTP specification.
RTP API, for control over audio streaming sessions
Android 3.1 exposes an API to its built-in RTP (Real-time Transport Protocol) stack, which applications can use to directly manage on-demand or interactive data streaming. In particular, apps that provide VOIP, push-to-talk, conferencing, and audio streaming can use the API to initiate sessions and transmit or receive data streams over any available network.
Android 3.1 includes a variety of performance optimizations that help make applications faster and more responsive. Some of the optimizations include:
- A new LRU cache class lets applications benefit from efficient caching. Applications can use the class to reduce the time spent computing or downloading data from the network, while maintaining a sensible memory footprint for the cached data.
- The UI framework now supports partial invalidates in hardware-accelerated Views, which makes drawing operations in those Views more efficient.
- A new graphics method, setHasAlpha(), allows apps to hint that a given bitmap is opaque. This provides an extra performance boost for some types of blits and is especially useful for applications that use ARGB_8888 bitmaps.