docs/doc/developer/sdk/ReactNative.mdx
A React Native SDK for connecting to and interacting with Omi devices via Bluetooth Low Energy (BLE). Build cross-platform mobile apps for iOS and Android.
<CardGroup cols={3}> <Card title="Cross-Platform" icon="mobile"> iOS and Android support </Card> <Card title="BLE Connection" icon="bluetooth"> Bluetooth Low Energy </Card> <Card title="Real-time Audio" icon="microphone"> Stream and transcribe </Card> </CardGroup>npm install @omiai/omi-react-native
# or
yarn add @omiai/omi-react-native
This SDK relies on react-native-ble-plx for BLE communication:
npm install react-native-ble-plx
cd ios && pod install
```xml
<key>NSBluetoothAlwaysUsageDescription</key>
<string>This app uses Bluetooth to connect to Omi devices</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>This app uses Bluetooth to connect to Omi devices</string>
```
```xml
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!-- For Android 12+ -->
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
```
<Note>
This step is crucial. Without it, the app will fail to build with native module errors.
</Note>
<Warning>
Open the `.xcworkspace` file, NOT the `.xcodeproj` file.
</Warning>
Select your target device and build. Bluetooth doesn't work in simulators - use a physical device.
</Tab>
<Tab title="Android">
```bash
cd example
npm run android
```
Make sure USB debugging is enabled on your connected Android device.
</Tab>
</Tabs>
import { OmiConnection, DeviceConnectionState, BleAudioCodec } from '@omiai/omi-react-native';
// Create an instance of OmiConnection
const omiConnection = new OmiConnection();
// Scan for devices
const stopScan = omiConnection.scanForDevices((device) => {
console.log('Found device:', device.name, device.id);
}, 10000); // Scan for 10 seconds
// Connect to a device
async function connectToDevice(deviceId) {
const success = await omiConnection.connect(deviceId, (id, state) => {
console.log(`Device ${id} connection state changed to: ${state}`);
});
if (success) {
console.log('Connected successfully!');
// Get the audio codec
const codec = await omiConnection.getAudioCodec();
console.log('Device audio codec:', codec);
// Start listening for audio data
const subscription = await omiConnection.startAudioBytesListener((bytes) => {
console.log('Received audio bytes:', bytes.length);
});
// Get battery level
const batteryLevel = await omiConnection.getBatteryLevel();
console.log('Battery level:', batteryLevel);
// Later, stop listening for audio
await omiConnection.stopAudioBytesListener(subscription);
// Disconnect when done
await omiConnection.disconnect();
}
}
| Method | Description | Returns |
|---|---|---|
scanForDevices(onDeviceFound, timeoutMs) | Scan for nearby Omi devices | Function to stop scanning |
connect(deviceId, onConnectionStateChanged) | Connect to an Omi device | Promise<boolean> |
disconnect() | Disconnect from current device | Promise<void> |
isConnected() | Check connection status | boolean |
getAudioCodec() | Get device audio codec | Promise<BleAudioCodec> |
startAudioBytesListener(callback) | Start receiving audio bytes | Promise<Subscription> |
stopAudioBytesListener(subscription) | Stop receiving audio bytes | Promise<void> |
getBatteryLevel() | Get battery percentage | Promise<number> |
MIT License