sensors_new 1.0.0
sensors_new: ^1.0.0 copied to clipboard
A Flutter plugin for accessing device sensors like accelerometer, gyroscope, and step detector.
flutter_sensors #
A Flutter plugin for accessing device sensors such as accelerometer, gyroscope, and step detector on Android and iOS.
Installation #
Add the following to your pubspec.yaml:
dependencies:
flutter_sensors: ^0.1.0
Run:
flutter pub get
Usage #
The plugin provides a SensorManager class to check sensor availability and stream sensor data. Below is an example of how to use it to access accelerometer data:
import 'package:flutter/material.dart';
import 'package:flutter_sensors/flutter_sensors.dart';
import 'package:permission_handler/permission_handler.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: SensorScreen(),
);
}
}
class SensorScreen extends StatefulWidget {
@override
_SensorScreenState createState() => _SensorScreenState();
}
class _SensorScreenState extends State<SensorScreen> {
final SensorManager _sensorManager = SensorManager();
Stream<SensorEvent>? _sensorStream;
@override
void initState() {
super.initState();
_checkSensorAndStart();
}
Future<void> _checkSensorAndStart() async {
await requestActivityPermission();
bool isAvailable = await _sensorManager.isSensorAvailable(Sensors.ACCELEROMETER);
if (isAvailable) {
_sensorStream = await _sensorManager.sensorUpdates(
sensorId: Sensors.ACCELEROMETER,
interval: Sensors.SENSOR_DELAY_NORMAL,
);
setState(() {});
}
}
Future<void> requestActivityPermission() async {
if (await Permission.activityRecognition.request().isGranted) {
print('Permission granted');
} else {
print('Activity recognition permission denied');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('Sensor Data')),
body: _sensorStream == null
? Center(child: Text('Sensor not available'))
: StreamBuilder<SensorEvent>(
stream: _sensorStream,
builder: (context, snapshot) {
if (!snapshot.hasData) {
return Center(child: CircularProgressIndicator());
}
final event = snapshot.data!;
return Center(
child: Text(
'Sensor: ${event.sensorId}\n'
'Data: ${event.data}\n'
'Accuracy: ${event.accuracy}',
),
);
},
),
);
}
}
Permissions #
Android #
Add the following to android/app/src/main/AndroidManifest.xml:
<uses-permission android:name="android.permission.ACTIVITY_RECOGNITION"/>
iOS #
Add the following to ios/Runner/Info.plist:
<key>NSMotionUsageDescription</key>
<string>We need access to motion data for sensor functionality.</string>
Supported Sensors #
- Accelerometer (ID: 1)
- Gyroscope (ID: 4)
- Magnetic Field (ID: 2)
- Linear Acceleration (ID: 10)
- Step Detector (ID: 18)
- Rotation Vector (ID: 11)
API Reference #
SensorManager.isSensorAvailable(sensorId): Check if a sensor is available.SensorManager.sensorUpdates(sensorId, interval): Stream sensor data.SensorManager.updateSensorInterval(sensorId, interval): Update the sensor update interval.Sensors: Constants for sensor IDs and intervals (e.g.,Sensors.ACCELEROMETER,Sensors.SENSOR_DELAY_NORMAL).
Contributing #
Contributions are welcome! Please submit issues or pull requests to GitHub.
License #
This project is licensed under the MIT License - see the LICENSE file for details.