Flutter原生GNSS数据访问插件raw_gnss的使用
Flutter原生GNSS数据访问插件raw_gnss的使用
raw_gnss 📡
raw_gnss 📡 使得获取原始GNSS数据(包括GNSS测量事件、GNSS导航消息和GNSS状态事件)变得简单。
在Android上获取原始GNSS数据
从Android 7.0开始,Android公开了获取原始数据点所需的GNSS API,从而打开了位置黑盒子。
raw_gnss允许你通过内置流轻松获取GNSS测量事件、GNSS导航消息和GNSS状态。
使用方法
GNSS测量
RawGnss().gnssMeasurementEvents.listen((e) {});
GNSS导航消息
RawGnss().gnssNavigationMessageEvents.listen((e) {});
GNSS状态
RawGnss().gnssStatusEvents.listen((e) {});
示例:获取GNSS测量模型
StreamBuilder<GnssMeasurementModel>(
builder: (context, snapshot) {
if (snapshot.data == null) {
return CircularProgressIndicator();
}
return ListView.builder(
itemBuilder: (context, position) {
return ListTile(
title: Text(
"卫星: ${snapshot.data!.measurements![position].svid}"),
);
},
itemCount: snapshot.data!.measurements?.length ?? 0,
);
},
stream: RawGnss().gnssMeasurementEvents,
),
注意: iOS目前还不支持暴露原始位置数据,因此该插件目前不支持iOS。
完整示例代码
以下是一个完整的示例代码,展示了如何在Android设备上使用raw_gnss
插件来获取GNSS状态数据。
import 'package:flutter/material.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:raw_gnss/gnss_status_model.dart';
import 'package:raw_gnss/raw_gnss.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
visualDensity: VisualDensity.adaptivePlatformDensity,
),
home: Scaffold(
appBar: AppBar(
title: Text("Demo"),
),
body: HomeScreen(),
),
);
}
}
class HomeScreen extends StatefulWidget {
[@override](/user/override)
_HomeScreenState createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
var _hasPermissions = false;
late RawGnss _gnss;
[@override](/user/override)
void initState() {
super.initState();
_gnss = RawGnss();
Permission.location
.request()
.then((value) => setState(() => _hasPermissions = value.isGranted));
}
[@override](/user/override)
Widget build(BuildContext context) => _hasPermissions
? StreamBuilder<GnssStatusModel>(
builder: (context, snapshot) {
if (snapshot.data == null) {
return _loadingSpinner();
} else {
return ListView.builder(
itemBuilder: (context, position) {
return ListTile(
title: Text(
"卫星: ${snapshot.data!.status![position].azimuthDegrees}"),
);
},
itemCount: snapshot.data!.satelliteCount ?? 0,
);
}
},
stream: _gnss.gnssStatusEvents,
)
: _loadingSpinner();
Widget _loadingSpinner() => const Center(child: CircularProgressIndicator());
}
更多关于Flutter原生GNSS数据访问插件raw_gnss的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter原生GNSS数据访问插件raw_gnss的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter应用中使用raw_gnss
插件来访问原生GNSS(全球导航卫星系统)数据的示例代码。这个插件允许你直接从设备获取原始的GNSS数据,比如卫星信息、NMEA句子等。
首先,确保你已经在你的pubspec.yaml
文件中添加了raw_gnss
依赖:
dependencies:
flutter:
sdk: flutter
raw_gnss: ^最新版本号 # 请替换为最新的版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter应用中,你可以按照以下步骤使用raw_gnss
插件:
- 导入插件:
在你的Dart文件中导入raw_gnss
插件:
import 'package:raw_gnss/raw_gnss.dart';
- 请求权限:
在Android和iOS上,访问GNSS数据通常需要位置权限。你可以在应用的启动阶段请求这些权限。这里假设你已经使用了permission_handler
插件来处理权限请求。
import 'package:permission_handler/permission_handler.dart';
Future<void> requestPermissions() async {
var status = await Permission.locationWhenInUse.status;
if (!status.isGranted) {
var result = await Permission.locationWhenInUse.request();
if (result.isDenied || result.isPermanentlyDenied) {
// 处理权限被拒绝的情况
}
}
}
- 启动GNSS数据监听:
使用RawGnss
类来启动和停止GNSS数据监听。
void startGnssDataListening() async {
RawGnss.startListening((GnssStatus status) {
print('GNSS Status: $status');
}, (GnssData data) {
print('GNSS Data: $data');
}, (List<NmeaSentence> sentences) {
sentences.forEach((sentence) {
print('NMEA Sentence: ${sentence.sentence}');
});
}, onError: (error, stackTrace) {
print('Error: $error');
print('Stack Trace: $stackTrace');
});
}
void stopGnssDataListening() {
RawGnss.stopListening();
}
- 在应用中调用这些方法:
在你的Flutter应用的适当位置(比如initState
或者按钮点击事件中)调用这些方法。
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
requestPermissions();
startGnssDataListening();
}
@override
void dispose() {
stopGnssDataListening();
super.dispose();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Raw GNSS Data Example'),
),
body: Center(
child: Text('Listening for GNSS data...'),
),
),
);
}
}
这个示例展示了如何在Flutter应用中初始化raw_gnss
插件,请求必要的权限,并启动和停止GNSS数据的监听。监听器回调会打印GNSS状态、数据和NMEA句子到控制台。
请注意,实际应用中你可能需要更复杂的UI和错误处理逻辑,这里为了简洁而省略了这些部分。另外,由于raw_gnss
插件可能在不同版本的Flutter和Dart环境中有所不同,建议查阅最新的官方文档和示例代码以确保兼容性。