MoYoung Glasses Flutter SDK / 魔样智能眼镜 Flutter SDK
English
A comprehensive Flutter plugin for communicating with MoYoung smart glasses via Bluetooth. This plugin provides a unified API for both Android and iOS platforms, wrapping the native SDKs to enable Flutter applications to seamlessly interact with MoYoung smart glasses.
Chinese
一个全面的 Flutter 插件,用于通过蓝牙与魔样智能眼镜通信。该插件为 Android 和 iOS 平台提供了统一的 API,封装了原生 SDK,使 Flutter 应用程序能够无缝地与魔样智能眼镜交互。
Features / 功能特性
- 🔍 Device Scanning / 设备扫描 - Scan and discover nearby MoYoung smart glasses / 扫描并发现附近的 MoYoung 智能眼镜
- 🔗 Device Connection / 设备连接 - Connect, disconnect and manage device bonding / 连接、断开和管理设备绑定
- 📱 Device Control / 设备控制 - Restart, shutdown, factory reset / 重启、关机、恢复出厂设置
- 🔋 Battery Monitoring / 电池监控 - Real-time battery level and charging status / 实时电池电量和充电状态
- 📸 Camera Control / 相机控制 - Take photos and record videos / 拍照和录像
- 🎵 Audio Features / 音频功能 - Audio control, recording and playback / 音频控制、录音和播放
- 📁 File Management / 文件管理 - Access and manage files on device / 访问和管理设备上的文件
- 📶 Wi-Fi Support / Wi-Fi 支持 - Enable/disable Wi-Fi, file synchronization / 开启/关闭 Wi-Fi,文件同步
- 🤖 AI Functions / AI 功能 - AI voice reply and image recognition / AI 语音回复和图像识别
- ⏰ Time & Language / 时间和语言 - Sync time and set language preferences / 同步时间和设置语言偏好
- 🔄 OTA Updates / OTA 升级 - Over-the-air firmware updates / 空中固件升级
- 📍 Location Services / 位置服务 - GPS and positioning features / GPS 和定位功能
- 🏃 Health Monitoring / 健康监测 - Step counting, heart rate, sleep tracking / 计步、心率、睡眠跟踪
Installation
Add this to your package's pubspec.yaml file:
dependencies:
moyoung_glasses_ble_plugin: ^1.0.0
Then run:
flutter pub get
Platform Setup
Android
Add the following permissions to your android/app/src/main/AndroidManifest.xml:
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
<uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
<uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
iOS
Add the following to your ios/Runner/Info.plist:
<key>NSBluetoothAlwaysUsageDescription</key>
<string>This app needs Bluetooth access to connect with smart glasses</string>
<key>NSBluetoothPeripheralUsageDescription</key>
<string>This app needs Bluetooth access to connect with smart glasses</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app needs location access to scan for Bluetooth devices</string>
Quick Start
import 'package:moyoung_glasses_ble_plugin/moyoung_glasses_ble.dart';
class _MyAppState extends State<MyApp> {
final MoYoungGlassesBle _glasses = MoYoungGlassesBle();
@override
void initState() {
super.initState();
_initGlasses();
}
Future<void> _initGlasses() async {
// Check if Bluetooth is enabled
bool isEnabled = await _glasses.checkBluetoothEnable;
if (!isEnabled) {
print('Please enable Bluetooth');
return;
}
// Start scanning for devices
_glasses.startScan(10);
// Listen for scan results
_glasses.bleScanEveStm.listen((device) {
print('Found device: ${device.name} (${device.address})');
});
// Listen for connection state
_glasses.connStateEveStm.listen((state) {
print('Connection state: ${state.connectState}');
});
// Listen for battery updates
_glasses.batteryEveStm.listen((battery) {
print('Battery: ${battery['battery']}% - Charging: ${battery['charging']}');
});
}
Future<void> _connectDevice(String address) async {
bool success = await _glasses.connect('{"address":"$address"}');
if (success) {
print('Connected successfully');
}
}
}
API Reference
Main Classes
MoYoungGlassesBle- Main entry point for all operationsBleScanBean- Represents a scanned deviceConnectStateBean- Represents connection state
Key Methods
Bluetooth & Scanning
// Check Bluetooth status
bool isEnabled = await glasses.checkBluetoothEnable;
// Start scanning
await glasses.startScan(10); // 10 seconds
// Stop scanning
await glasses.stopScan();
Connection Management
// Connect to device
await glasses.connect('{"address":"XX:XX:XX:XX:XX:XX"}');
// Disconnect
await glasses.disconnect();
// Get connected device
String device = await glasses.connectedDevice;
Device Information
// Get battery info
Map<String, dynamic> battery = await glasses.queryBattery();
// Get device version
String version = await glasses.queryDeviceVersion();
// Sync time
await glasses.syncTime();
Camera Control
// Take photo
await glasses.takePhoto();
// Start recording
await glasses.startVideoRecord();
// Stop recording
await glasses.stopVideoRecord();
Event Streams
// Listen to scan results
glasses.bleScanEveStm.listen((BleScanBean device) {
// Handle scanned device
});
// Listen to connection state
glasses.connStateEveStm.listen((ConnectStateBean state) {
// Handle connection changes
});
// Listen to battery updates
glasses.batteryEveStm.listen((Map<String, dynamic> battery) {
// Handle battery changes
});
For a complete list of all APIs, please see API_LIST.md.
Example App
See the example/ directory for a complete Flutter app demonstrating all features of the plugin.
Requirements
- Flutter SDK >= 3.0.0
- Android SDK >= 21 (Android 5.0)
- iOS >= 11.0
- Bluetooth LE support
Support
- Homepage: https://www.moyoung.com/en/
License
This project is licensed under the MIT License - see the LICENSE file for details.
Changelog
See CHANGELOG.md for a list of changes in each version.