Flutter GPS追踪与定位插件traccar_hypegps的使用

Flutter GPS追踪与定位插件 traccar_hypegps 的使用

traccar_hypegps

维护者:hypegps。

开始使用

该项目是一个 Dart 包的起点,它是一个库模块,其中包含可以在多个 Flutter 或 Dart 项目中轻松共享的代码。

要开始使用 Flutter,请参阅我们的 在线文档,其中提供了教程、示例、移动开发指南以及完整的 API 参考。

许可证

MIT 许可证

版权所有 © 2021 HypeGPS

在此授予任何人免费获得该软件及其相关文档文件(以下简称“软件”)副本的权利,不受限制地处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本,并允许他人将软件提供给他们使用,但须遵守以下条件:

上述版权声明和本许可通知应包含在所有副本或软件的重要部分中。

软件按“原样”提供,不作任何明示或暗示的保证,包括但不限于对适销性、特定用途适用性和非侵权的保证。在任何情况下,作者或版权持有人均不对因使用或以其他方式与软件有关的任何索赔、损害或其他责任负责,无论是在合同诉讼、侵权行为还是其他方面。


使用示例

以下是使用 traccar_hypegps 插件的完整示例代码,展示如何在 Flutter 应用程序中实现 GPS 追踪功能。

import 'package:flutter/material.dart';
import 'package:traccar_hypegps/traccar_hypegps.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: TrackingPage(),
    );
  }
}

class TrackingPage extends StatefulWidget {
  @override
  _TrackingPageState createState() => _TrackingPageState();
}

class _TrackingPageState extends State<TrackingPage> {
  String _latitude = "未获取";
  String _longitude = "未获取";

  @override
  void initState() {
    super.initState();
    // 初始化插件
    TraccarHypegps.initialize();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("GPS 跟踪示例"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            Text("当前纬度: $_latitude"),
            Text("当前经度: $_longitude"),
            ElevatedButton(
              onPressed: () async {
                // 获取当前位置
                final location = await TraccarHypegps.getLocation();
                setState(() {
                  _latitude = location.latitude.toString();
                  _longitude = location.longitude.toString();
                });
              },
              child: Text("获取位置"),
            ),
          ],
        ),
      ),
    );
  }
}

代码说明

  1. 导入插件

    import 'package:traccar_hypegps/traccar_hypegps.dart';
    

    导入 traccar_hypegps 插件。

  2. 初始化插件

    TraccarHypegps.initialize();
    

    在应用启动时调用 initialize() 方法来初始化插件。

  3. 获取位置

    final location = await TraccarHypegps.getLocation();
    

    使用 getLocation() 方法获取设备的当前经纬度。

  4. 更新 UI

    setState(() {
      _latitude = location.latitude.toString();
      _longitude = location.longitude.toString();
    });
    

更多关于Flutter GPS追踪与定位插件traccar_hypegps的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter GPS追踪与定位插件traccar_hypegps的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


traccar_hypegps 是一个用于 Flutter 的应用插件,用于实现 GPS 追踪和定位功能。它通常用于需要实时位置追踪的应用场景,如物流、出租车、共享单车等。

1. 安装插件

首先,你需要在 pubspec.yaml 文件中添加 traccar_hypegps 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  traccar_hypegps: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来安装插件。

2. 配置 Android 和 iOS

Android 配置

android/app/src/main/AndroidManifest.xml 文件中,确保你已添加以下权限:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.INTERNET" />

iOS 配置

ios/Runner/Info.plist 文件中,确保你已添加以下权限:

<key>NSLocationAlwaysUsageDescription</key>
<string>我们需要访问您的位置以提供定位服务。</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>我们需要访问您的位置以提供定位服务。</string>

3. 使用插件

初始化插件

在应用的入口文件(通常是 main.dart)中,初始化 traccar_hypegps 插件:

import 'package:traccar_hypegps/traccar_hypegps.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await TraccarHypegps.initialize();
  runApp(MyApp());
}

启动追踪服务

在需要启动追踪的地方,调用 startTracking 方法:

import 'package:traccar_hypegps/traccar_hypegps.dart';

void startTracking() async {
  await TraccarHypegps.startTracking(
    url: 'https://your-traccar-server.com',  // 你的 Traccar 服务器地址
    deviceId: 'your-device-id',  // 设备 ID
    interval: 10,  // 定位间隔时间(秒)
  );
}

停止追踪服务

在需要停止追踪的地方,调用 stopTracking 方法:

import 'package:traccar_hypegps/traccar_hypegps.dart';

void stopTracking() async {
  await TraccarHypegps.stopTracking();
}

监听位置更新

你可以通过监听位置更新来获取实时位置信息:

import 'package:traccar_hypegps/traccar_hypegps.dart';

void listenToLocationUpdates() {
  TraccarHypegps.onLocationUpdate.listen((location) {
    print('Latitude: ${location.latitude}');
    print('Longitude: ${location.longitude}');
    print('Speed: ${location.speed}');
    print('Accuracy: ${location.accuracy}');
    print('Timestamp: ${location.timestamp}');
  });
}

4. 处理权限

在 Android 和 iOS 上,你需要确保应用已获得定位权限。你可以使用 permission_handler 插件来请求权限:

import 'package:permission_handler/permission_handler.dart';

void requestPermissions() async {
  var status = await Permission.location.request();
  if (status.isGranted) {
    print('Location permission granted');
  } else {
    print('Location permission denied');
  }
}

5. 注意事项

  • 后台定位:在 Android 上,后台定位需要使用前台服务。确保你已正确配置 foregroundService
  • 电池优化:长时间使用 GPS 可能会消耗大量电量,建议在不需要时停止追踪服务。
  • 服务器配置:确保你的 Traccar 服务器已正确配置,并能够接收和处理设备发送的位置数据。

6. 示例代码

以下是一个完整的示例代码:

import 'package:flutter/material.dart';
import 'package:traccar_hypegps/traccar_hypegps.dart';
import 'package:permission_handler/permission_handler.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await TraccarHypegps.initialize();
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  [@override](/user/override)
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  [@override](/user/override)
  void initState() {
    super.initState();
    requestPermissions();
    listenToLocationUpdates();
  }

  void requestPermissions() async {
    var status = await Permission.location.request();
    if (status.isGranted) {
      print('Location permission granted');
    } else {
      print('Location permission denied');
    }
  }

  void listenToLocationUpdates() {
    TraccarHypegps.onLocationUpdate.listen((location) {
      print('Latitude: ${location.latitude}');
      print('Longitude: ${location.longitude}');
      print('Speed: ${location.speed}');
      print('Accuracy: ${location.accuracy}');
      print('Timestamp: ${location.timestamp}');
    });
  }

  void startTracking() async {
    await TraccarHypegps.startTracking(
      url: 'https://your-traccar-server.com',
      deviceId: 'your-device-id',
      interval: 10,
    );
  }

  void stopTracking() async {
    await TraccarHypegps.stopTracking();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Traccar GPS Tracker'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: startTracking,
              child: Text('Start Tracking'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: stopTracking,
              child: Text('Stop Tracking'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部