Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ Allows you to connect React Native Mobile apps with WearOS.
# Table of Contents

- [Installation](#installation)
- [Mi Band Setup](#mi-band-setup)
- [React Native API Documentation](#react-native-api-documentation)
- [Jetpack Compose API Documentation](#jetpack-compose-api-documentation)
- [How to run the example](#how-to-run-the-example)
Expand Down Expand Up @@ -69,6 +70,15 @@ Add the following entry to your `android/app/src/main/AndroidManifest.xml` (full
</manifest>
```

## Mi Band Setup

To use a Mi Band with this library the band must first be paired with the
Android device through the official **Mi Fitness** (or **Zepp Life**)
application. Ensure Bluetooth is enabled and grant the app the required
permissions such as `BLUETOOTH_CONNECT`, `BLUETOOTH_SCAN` and
`ACCESS_FINE_LOCATION`. More details are available in
[docs/miband.md](docs/miband.md).

## React Native API Documentation

The example of implementation available in the [CounterScreen](example/src/CounterScreen/index.android.tsx).
Expand Down
14 changes: 14 additions & 0 deletions docs/miband.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# Mi Band Setup

To connect a Mi Band device with this library:

1. Pair the band with your Android phone using the official **Mi Fitness** (or **Zepp Life**) application.
2. Ensure Bluetooth is enabled and the band is connected before launching your React Native app.
3. Grant the application the required permissions:
- `android.permission.BLUETOOTH_CONNECT`
- `android.permission.BLUETOOTH_SCAN`
- `android.permission.ACCESS_FINE_LOCATION` (required for Bluetooth Low Energy scanning on older Android versions)
- `android.permission.BODY_SENSORS` if accessing heart rate or other biometric data
- `android.permission.POST_NOTIFICATIONS` to receive notifications on recent Android versions

Without pairing through the Mi Fitness application the device will not accept connections from third‑party apps.
3 changes: 3 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,9 @@
"react": "*",
"react-native": "*"
},
"dependencies": {
"rn-miband-connector": "^0.1.0"
},
"workspaces": [
"example",
"watch-example"
Expand Down
43 changes: 43 additions & 0 deletions src/miband/MiBandConnector.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import { EventEmitter } from 'events';
import type { AddListener, WatchEvents } from '../types';
// The rn-miband-connector library exposes an EventEmitter that
// delivers raw Mi Band events. We translate those events to the
// shared `watchEvents` interface used by this project.
//
// We keep the dependency typed as `any` to avoid requiring its
// TypeScript definitions.
// eslint-disable-next-line @typescript-eslint/no-var-requires
const MiBand: any = require('rn-miband-connector');

const miband = new MiBand();
const emitter = new EventEmitter();

// Forward any event from the Mi Band library as a `message` event so
// that consumers can subscribe via `watchEvents.on('message', cb)`.
miband.on('data', (payload: unknown) => {
emitter.emit('message', payload);
});

// Some implementations might emit a generic `event` callback instead
// of `data`. Handle that as well.
miband.on('event', (payload: unknown) => {
emitter.emit('message', payload);
});

const addListener: AddListener = (event, cb) => {
if (event !== 'message') {
throw new Error(`Unknown watch event "${event}"`);
}

emitter.on(event, cb);
return () => {
emitter.removeListener(event, cb);
};
};

export const mibandEvents: WatchEvents = {
addListener,
Comment on lines +38 to +39

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] Export Mi Band connector through public API

The new MiBandConnector declares and exports mibandEvents, but nothing in the package imports or re‑exports it. watchEvents in subscriptions.ts still uses the existing native module, so consumers loading react-native-wear-connectivity cannot subscribe to Mi Band events despite the new README/docs. As written this code is dead and the added dependency brings no usable feature. Consider wiring the connector into watchEvents or re-exporting it from the library entry point so callers can actually receive Mi Band data.

Useful? React with 👍 / 👎.

on: addListener,
};

export default mibandEvents;
1 change: 1 addition & 0 deletions src/miband/rn-miband-connector.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
declare module 'rn-miband-connector';