# MidiManager

Added in[API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Summary:[Nested Classes](https://developer.android.com/reference/android/media/midi/MidiManager#nestedclasses)\|[Constants](https://developer.android.com/reference/android/media/midi/MidiManager#constants)\|[Methods](https://developer.android.com/reference/android/media/midi/MidiManager#pubmethods)\|[Inherited Methods](https://developer.android.com/reference/android/media/midi/MidiManager#inhmethods)  

# MidiManager

*** ** * ** ***

[Kotlin](https://developer.android.com/reference/kotlin/android/media/midi/MidiManager "View this page in Kotlin")\|Java

`
public

final

class
MidiManager
`  
`

extends `[Object](https://developer.android.com/reference/java/lang/Object)`


``


`

|---|--------------------------------|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object) ||
| ↳ | android.media.midi.MidiManager |

<br />

*** ** * ** ***

This class is the public application interface to the MIDI service.  
Requires the[PackageManager#FEATURE_MIDI](https://developer.android.com/reference/android/content/pm/PackageManager#FEATURE_MIDI)feature which can be detected using[PackageManager.hasSystemFeature(String)](https://developer.android.com/reference/android/content/pm/PackageManager#hasSystemFeature(java.lang.String)).

## Summary

|                                                                                                                                                                                                                                                                                                                                                                                  ### Nested classes                                                                                                                                                                                                                                                                                                                                                                                  ||
|--------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ` class`     | [MidiManager.DeviceCallback](https://developer.android.com/reference/android/media/midi/MidiManager.DeviceCallback) Callback class used for clients to receive MIDI device added and removed notifications                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
| ` interface` | [MidiManager.OnDeviceOpenedListener](https://developer.android.com/reference/android/media/midi/MidiManager.OnDeviceOpenedListener) Listener class used for receiving the results of[MidiManager.openDevice(MidiDeviceInfo, OnDeviceOpenedListener, Handler)](https://developer.android.com/reference/android/media/midi/MidiManager#openDevice(android.media.midi.MidiDeviceInfo,%20android.media.midi.MidiManager.OnDeviceOpenedListener,%20android.os.Handler))and[MidiManager.openBluetoothDevice(BluetoothDevice, OnDeviceOpenedListener, Handler)](https://developer.android.com/reference/android/media/midi/MidiManager#openBluetoothDevice(android.bluetooth.BluetoothDevice,%20android.media.midi.MidiManager.OnDeviceOpenedListener,%20android.os.Handler)) |

|                                                                                          ### Constants                                                                                           ||
|-------|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `int` | [TRANSPORT_MIDI_BYTE_STREAM](https://developer.android.com/reference/android/media/midi/MidiManager#TRANSPORT_MIDI_BYTE_STREAM) Constant representing MIDI devices.                       |
| `int` | [TRANSPORT_UNIVERSAL_MIDI_PACKETS](https://developer.android.com/reference/android/media/midi/MidiManager#TRANSPORT_UNIVERSAL_MIDI_PACKETS) Constant representing Universal MIDI devices. |

|                                                                                                                                                                                                                                                                                                                                                                                                                                                                ### Public methods                                                                                                                                                                                                                                                                                                                                                                                                                                                                ||
|------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| ` `[MidiDeviceInfo[]](https://developer.android.com/reference/android/media/midi/MidiDeviceInfo)                                                                 | ` `[getDevices](https://developer.android.com/reference/android/media/midi/MidiManager#getDevices())`() ` *This method was deprecated in API level 33. Use[getDevicesForTransport(int)](https://developer.android.com/reference/android/media/midi/MidiManager#getDevicesForTransport(int))instead.*                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| ` `[Set](https://developer.android.com/reference/java/util/Set)`<`[MidiDeviceInfo](https://developer.android.com/reference/android/media/midi/MidiDeviceInfo)`>` | ` `[getDevicesForTransport](https://developer.android.com/reference/android/media/midi/MidiManager#getDevicesForTransport(int))`(int transport) ` Gets a list of connected MIDI devices by transport.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
| ` void`                                                                                                                                                          | ` `[openBluetoothDevice](https://developer.android.com/reference/android/media/midi/MidiManager#openBluetoothDevice(android.bluetooth.BluetoothDevice,%20android.media.midi.MidiManager.OnDeviceOpenedListener,%20android.os.Handler))`(`[BluetoothDevice](https://developer.android.com/reference/android/bluetooth/BluetoothDevice)` bluetoothDevice, `[MidiManager.OnDeviceOpenedListener](https://developer.android.com/reference/android/media/midi/MidiManager.OnDeviceOpenedListener)` listener, `[Handler](https://developer.android.com/reference/android/os/Handler)` handler) ` Opens a Bluetooth MIDI device for reading and writing.                                                                                                                              |
| ` void`                                                                                                                                                          | ` `[openDevice](https://developer.android.com/reference/android/media/midi/MidiManager#openDevice(android.media.midi.MidiDeviceInfo,%20android.media.midi.MidiManager.OnDeviceOpenedListener,%20android.os.Handler))`(`[MidiDeviceInfo](https://developer.android.com/reference/android/media/midi/MidiDeviceInfo)` deviceInfo, `[MidiManager.OnDeviceOpenedListener](https://developer.android.com/reference/android/media/midi/MidiManager.OnDeviceOpenedListener)` listener, `[Handler](https://developer.android.com/reference/android/os/Handler)` handler) ` Opens a MIDI device for reading and writing.                                                                                                                                                                |
| ` void`                                                                                                                                                          | ` `[registerDeviceCallback](https://developer.android.com/reference/android/media/midi/MidiManager#registerDeviceCallback(int,%20java.util.concurrent.Executor,%20android.media.midi.MidiManager.DeviceCallback))`(int transport, `[Executor](https://developer.android.com/reference/java/util/concurrent/Executor)` executor, `[MidiManager.DeviceCallback](https://developer.android.com/reference/android/media/midi/MidiManager.DeviceCallback)` callback) ` Registers a callback to receive notifications when MIDI devices are added and removed for a specific transport type.                                                                                                                                                                                         |
| ` void`                                                                                                                                                          | ` `[registerDeviceCallback](https://developer.android.com/reference/android/media/midi/MidiManager#registerDeviceCallback(android.media.midi.MidiManager.DeviceCallback,%20android.os.Handler))`(`[MidiManager.DeviceCallback](https://developer.android.com/reference/android/media/midi/MidiManager.DeviceCallback)` callback, `[Handler](https://developer.android.com/reference/android/os/Handler)` handler) ` *This method was deprecated in API level 33. Use[registerDeviceCallback(int, java.util.concurrent.Executor, android.media.midi.MidiManager.DeviceCallback)](https://developer.android.com/reference/android/media/midi/MidiManager#registerDeviceCallback(int,%20java.util.concurrent.Executor,%20android.media.midi.MidiManager.DeviceCallback))instead.* |
| ` void`                                                                                                                                                          | ` `[unregisterDeviceCallback](https://developer.android.com/reference/android/media/midi/MidiManager#unregisterDeviceCallback(android.media.midi.MidiManager.DeviceCallback))`(`[MidiManager.DeviceCallback](https://developer.android.com/reference/android/media/midi/MidiManager.DeviceCallback)` callback) ` Unregisters a[DeviceCallback](https://developer.android.com/reference/android/media/midi/MidiManager.DeviceCallback).                                                                                                                                                                                                                                                                                                                                         |

| ### Inherited methods |
|-----------------------|---|
| From class` `[java.lang.Object](https://developer.android.com/reference/java/lang/Object)` ` |--------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | ` `[Object](https://developer.android.com/reference/java/lang/Object)          | ` `[clone](https://developer.android.com/reference/java/lang/Object#clone())`() ` Creates and returns a copy of this object.                                                                                                                                                      | | ` boolean`                                                                     | ` `[equals](https://developer.android.com/reference/java/lang/Object#equals(java.lang.Object))`(`[Object](https://developer.android.com/reference/java/lang/Object)` obj) ` Indicates whether some other object is "equal to" this one.                                           | | ` void`                                                                        | ` `[finalize](https://developer.android.com/reference/java/lang/Object#finalize())`() ` Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.                                                          | | ` final `[Class](https://developer.android.com/reference/java/lang/Class)`<?>` | ` `[getClass](https://developer.android.com/reference/java/lang/Object#getClass())`() ` Returns the runtime class of this`Object`.                                                                                                                                                | | ` int`                                                                         | ` `[hashCode](https://developer.android.com/reference/java/lang/Object#hashCode())`() ` Returns a hash code value for the object.                                                                                                                                                 | | ` final void`                                                                  | ` `[notify](https://developer.android.com/reference/java/lang/Object#notify())`() ` Wakes up a single thread that is waiting on this object's monitor.                                                                                                                            | | ` final void`                                                                  | ` `[notifyAll](https://developer.android.com/reference/java/lang/Object#notifyAll())`() ` Wakes up all threads that are waiting on this object's monitor.                                                                                                                         | | ` `[String](https://developer.android.com/reference/java/lang/String)          | ` `[toString](https://developer.android.com/reference/java/lang/Object#toString())`() ` Returns a string representation of the object.                                                                                                                                            | | ` final void`                                                                  | ` `[wait](https://developer.android.com/reference/java/lang/Object#wait(long,%20int))`(long timeoutMillis, int nanos) ` Causes the current thread to wait until it is awakened, typically by being*notified* or*interrupted*, or until a certain amount of real time has elapsed. | | ` final void`                                                                  | ` `[wait](https://developer.android.com/reference/java/lang/Object#wait(long))`(long timeoutMillis) ` Causes the current thread to wait until it is awakened, typically by being*notified* or*interrupted*, or until a certain amount of real time has elapsed.                   | | ` final void`                                                                  | ` `[wait](https://developer.android.com/reference/java/lang/Object#wait())`() ` Causes the current thread to wait until it is awakened, typically by being*notified* or*interrupted*.                                                                                             | ||

## Constants

### TRANSPORT_MIDI_BYTE_STREAM

Added in[API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public static final int TRANSPORT_MIDI_BYTE_STREAM
```

Constant representing MIDI devices. These devices do NOT support Universal MIDI Packets by default. These support the original MIDI 1.0 byte stream. When communicating to a USB device, a raw byte stream will be padded for USB. Likewise, for a Bluetooth device, the raw bytes will be converted for Bluetooth. For virtual devices, the byte stream will be passed directly. If Universal MIDI Packets are needed, please use MIDI-CI.

<br />

**See also:**

- [getDevicesForTransport(int)](https://developer.android.com/reference/android/media/midi/MidiManager#getDevicesForTransport(int))

Constant Value: 1 (0x00000001)  

### TRANSPORT_UNIVERSAL_MIDI_PACKETS

Added in[API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public static final int TRANSPORT_UNIVERSAL_MIDI_PACKETS
```

Constant representing Universal MIDI devices. These devices do support Universal MIDI Packets (UMP) by default. When sending data to these devices, please send UMP. Packets should always be a multiple of 4 bytes. UMP is defined in the USB MIDI 2.0 spec. Please read the standard for more info.

<br />

**See also:**

- [getDevicesForTransport(int)](https://developer.android.com/reference/android/media/midi/MidiManager#getDevicesForTransport(int))

Constant Value: 2 (0x00000002)

## Public methods

### getDevices

Added in[API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Deprecated in[API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public MidiDeviceInfo[] getDevices ()
```

<br />

**This method was deprecated in API level 33.**   
Use[getDevicesForTransport(int)](https://developer.android.com/reference/android/media/midi/MidiManager#getDevicesForTransport(int))instead.

Gets a list of connected MIDI devices. This returns all devices that do not default to Universal MIDI Packets. To get those instead, please call[getDevicesForTransport(int)](https://developer.android.com/reference/android/media/midi/MidiManager#getDevicesForTransport(int))instead.

<br />

|                                                            Returns                                                             ||
|-----------------------------------------------------------------------------------------------|---------------------------------|
| [MidiDeviceInfo[]](https://developer.android.com/reference/android/media/midi/MidiDeviceInfo) | an array of MIDI devices <br /> |

### getDevicesForTransport

Added in[API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public Set<MidiDeviceInfo> getDevicesForTransport (int transport)
```

Gets a list of connected MIDI devices by transport. TRANSPORT_MIDI_BYTE_STREAM is used for MIDI 1.0 and is the most common. For devices with built in Universal MIDI Packet support, use TRANSPORT_UNIVERSAL_MIDI_PACKETS instead.

<br />

|                                                                                                                                                                                                         Parameters                                                                                                                                                                                                         ||
|-------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `transport` | `int`: The transport to be used. This is either TRANSPORT_MIDI_BYTE_STREAM or TRANSPORT_UNIVERSAL_MIDI_PACKETS. Value is[TRANSPORT_MIDI_BYTE_STREAM](https://developer.android.com/reference/android/media/midi/MidiManager#TRANSPORT_MIDI_BYTE_STREAM), or[TRANSPORT_UNIVERSAL_MIDI_PACKETS](https://developer.android.com/reference/android/media/midi/MidiManager#TRANSPORT_UNIVERSAL_MIDI_PACKETS) <br /> |

|                                                                                                            Returns                                                                                                             ||
|---------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------|
| [Set](https://developer.android.com/reference/java/util/Set)`<`[MidiDeviceInfo](https://developer.android.com/reference/android/media/midi/MidiDeviceInfo)`>` | a collection of MIDI devices This value cannot be`null`. <br /> |

### openBluetoothDevice

Added in[API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public void openBluetoothDevice (BluetoothDevice bluetoothDevice, 
                MidiManager.OnDeviceOpenedListener listener, 
                Handler handler)
```

Opens a Bluetooth MIDI device for reading and writing. Bluetooth MIDI devices are only available after openBluetoothDevice() is called. Once that happens anywhere in the system, then the BLE-MIDI device will appear as just another MidiDevice to other apps. If the device opened using openBluetoothDevice() is closed, then it will no longer be available. To other apps, it will appear as if the BLE MidiDevice had been unplugged. If a MidiDevice is garbage collected then it will be closed automatically. If you want the BLE-MIDI device to remain available you should keep the object alive. You may close the device with MidiDevice.close().

<br />

|                                                                                                               Parameters                                                                                                               ||
|-------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `bluetoothDevice` | `BluetoothDevice`: a[BluetoothDevice](https://developer.android.com/reference/android/bluetooth/BluetoothDevice)to open as a MIDI device <br />                                                                     |
| `listener`        | `MidiManager.OnDeviceOpenedListener`: a[MidiManager.OnDeviceOpenedListener](https://developer.android.com/reference/android/media/midi/MidiManager.OnDeviceOpenedListener)to be called to receive the result <br /> |
| `handler`         | `Handler`: the[Handler](https://developer.android.com/reference/android/os/Handler)that will be used for delivering the result. If handler is null, then the thread used for the listener is unspecified. <br />    |

### openDevice

Added in[API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public void openDevice (MidiDeviceInfo deviceInfo, 
                MidiManager.OnDeviceOpenedListener listener, 
                Handler handler)
```

Opens a MIDI device for reading and writing.

<br />

|                                                                                                            Parameters                                                                                                             ||
|--------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `deviceInfo` | `MidiDeviceInfo`: a[MidiDeviceInfo](https://developer.android.com/reference/android/media/midi/MidiDeviceInfo)to open <br />                                                                                        |
| `listener`   | `MidiManager.OnDeviceOpenedListener`: a[MidiManager.OnDeviceOpenedListener](https://developer.android.com/reference/android/media/midi/MidiManager.OnDeviceOpenedListener)to be called to receive the result <br /> |
| `handler`    | `Handler`: the[Handler](https://developer.android.com/reference/android/os/Handler)that will be used for delivering the result. If handler is null, then the thread used for the listener is unspecified. <br />    |

### registerDeviceCallback

Added in[API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public void registerDeviceCallback (int transport, 
                Executor executor, 
                MidiManager.DeviceCallback callback)
```

Registers a callback to receive notifications when MIDI devices are added and removed for a specific transport type. The[DeviceCallback.onDeviceStatusChanged](https://developer.android.com/reference/android/media/midi/MidiManager.DeviceCallback#onDeviceStatusChanged(android.media.midi.MidiDeviceStatus))method will be called immediately for any devices that have open ports. This allows applications to know which input ports are already in use and, therefore, unavailable. Applications should call[getDevicesForTransport(int)](https://developer.android.com/reference/android/media/midi/MidiManager#getDevicesForTransport(int))before registering the callback to get a list of devices already added.

<br />

|                                                                                                                                                                                                         Parameters                                                                                                                                                                                                         ||
|-------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `transport` | `int`: The transport to be used. This is either TRANSPORT_MIDI_BYTE_STREAM or TRANSPORT_UNIVERSAL_MIDI_PACKETS. Value is[TRANSPORT_MIDI_BYTE_STREAM](https://developer.android.com/reference/android/media/midi/MidiManager#TRANSPORT_MIDI_BYTE_STREAM), or[TRANSPORT_UNIVERSAL_MIDI_PACKETS](https://developer.android.com/reference/android/media/midi/MidiManager#TRANSPORT_UNIVERSAL_MIDI_PACKETS) <br /> |
| `executor`  | `Executor`: The[Executor](https://developer.android.com/reference/java/util/concurrent/Executor)that will be used for delivering the device notifications. This value cannot be`null`. <br />                                                                                                                                                                                                                 |
| `callback`  | `MidiManager.DeviceCallback`: a[DeviceCallback](https://developer.android.com/reference/android/media/midi/MidiManager.DeviceCallback)for MIDI device notifications This value cannot be`null`. <br />                                                                                                                                                                                                        |

### registerDeviceCallback

Added in[API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  
Deprecated in[API level 33](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public void registerDeviceCallback (MidiManager.DeviceCallback callback, 
                Handler handler)
```

<br />

**This method was deprecated in API level 33.**   
Use[registerDeviceCallback(int, java.util.concurrent.Executor, android.media.midi.MidiManager.DeviceCallback)](https://developer.android.com/reference/android/media/midi/MidiManager#registerDeviceCallback(int,%20java.util.concurrent.Executor,%20android.media.midi.MidiManager.DeviceCallback))instead.

Registers a callback to receive notifications when MIDI 1.0 devices are added and removed. These are devices that do not default to Universal MIDI Packets. To register for a callback for those, call[registerDeviceCallback(DeviceCallback, Handler)](https://developer.android.com/reference/android/media/midi/MidiManager#registerDeviceCallback(android.media.midi.MidiManager.DeviceCallback,%20android.os.Handler))instead. The[DeviceCallback.onDeviceStatusChanged](https://developer.android.com/reference/android/media/midi/MidiManager.DeviceCallback#onDeviceStatusChanged(android.media.midi.MidiDeviceStatus))method will be called immediately for any devices that have open ports. This allows applications to know which input ports are already in use and, therefore, unavailable. Applications should call[getDevices()](https://developer.android.com/reference/android/media/midi/MidiManager#getDevices())before registering the callback to get a list of devices already added.

<br />

|                                                                                                                 Parameters                                                                                                                 ||
|------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `callback` | `MidiManager.DeviceCallback`: a[DeviceCallback](https://developer.android.com/reference/android/media/midi/MidiManager.DeviceCallback)for MIDI device notifications <br />                                                     |
| `handler`  | `Handler`: The[Handler](https://developer.android.com/reference/android/os/Handler)that will be used for delivering the device notifications. If handler is null, then the thread used for the callback is unspecified. <br /> |

### unregisterDeviceCallback

Added in[API level 23](https://developer.android.com/guide/topics/manifest/uses-sdk-element#ApiLevels)  

```
public void unregisterDeviceCallback (MidiManager.DeviceCallback callback)
```

Unregisters a[DeviceCallback](https://developer.android.com/reference/android/media/midi/MidiManager.DeviceCallback).

<br />

|                                                                               Parameters                                                                               ||
|------------|------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `callback` | `MidiManager.DeviceCallback`: a[DeviceCallback](https://developer.android.com/reference/android/media/midi/MidiManager.DeviceCallback)to unregister <br /> |