Watch devices
Google ADB Server has a hidden command to notify the client about device added and removed, so you don't need to poll the device list.
import type { MaybePromiseLike } from "@yume-chan/async";
import type { Event } from "@yume-chan/event";
export interface DeviceObserver<T> {
onDeviceAdd: Event<T[]>;
onDeviceRemove: Event<T[]>;
onListChange: Event<T[]>;
current: T[];
stop(): MaybePromiseLike<void>;
}
export declare class AdbServerClient {
trackDevices(): Promise<AdbServerDeviceObserver>;
}
export namespace AdbServerClient {
export interface DeviceObserver extends DeviceObserverBase<Device> {
onError: Event<Error>;
}
}
There is no equivalent ADB command.
Create an observer
The AdbServerClient#trackDevices method returns an AdbServerDeviceObserver object, which can be used to monitor device addition and removal.
- JavaScript
- TypeScript
const observer = await client.trackDevices();
import { AdbServerClient } from "@yume-chan/adb";
declare const client: AdbServerClient;
const observer = await client.trackDevices();
onError
The onError event is fired when an error occurs, like the connection to Google ADB Server is lost.
observer.onError((error) => {
console.error(error);
});
onDeviceAdd and onDeviceRemove
The onDeviceAdd and onDeviceRemove events are fired when a device is added or removed. The event argument is an array of AdbServerClient.Device objects that have been added or removed.
observer.onDeviceAdd((devices) => {
for (const device of devices) {
console.log(device.serial);
}
});
observer.onDeviceRemove((devices) => {
for (const device of devices) {
console.log(device.serial);
}
});
onListChange and current
The current field contains all the devices that are currently connected. Devices already connected when the observer is created won't fire the onDeviceAdd event, but they will be included in the current field.
When it changes, the onListChange event will fire with the new list. Note that with this device observer, each time the device list changes, the current field will be updated to a new array.
for (const device of observer.current) {
console.log(device.serial);
}
observer.onListChange((devices) => {
console.log(devices === observer.current); // true
});
Stop the observer
The stop method removes all the event listeners and releases all the resources. The device observer instance is no longer usable after calling stop.