搜尋套件、儲存庫與 APP 分類

套件詳情v0.13.2

background_location

一個 Flutter 外掛,可在 Android 和 iOS 上取得背景位置更新。iOS 使用 CoreLocation,Android 使用 FusedLocationProvider。

AndroidiOS
近 30 天下載
399
喜歡數
397
Pub 分數
130

安裝套件

flutter pub add background_location

套件介紹

根據套件公開資料產生的選型評估,僅供參考。

background_location 套件為 Android 與 iOS 平台提供持續的背景位置追蹤功能。它利用原生 API——iOS 上的 CoreLocation 與 Android 上的 FusedLocationProvider,即使應用程式處於非活動或終止狀態時,也能提供準確且高效的位置更新。此套件專為需要持續地理定位功能的應用程式(如健身追蹤器、共乘服務或資產監控)開發者設計,確保跨裝置的可靠性能。該外掛程式簡化整合過程,僅需最少設定,並支援可調整的更新間隔與精確度設定。

適用情境

  • 健身追蹤應用
  • 拼車服務
  • 資產監控
  • 地理圍欄應用
  • 配送追蹤

主要特色

  • 後台位置更新
  • 跨平台支援(Android 與 iOS)
  • 原生 API 集成
  • 可設定的精度和頻率
  • 所需設定最少

適合對象

  • 需要持續位置追蹤的應用程式
  • 開發即時定位功能的開發者
  • 需要地理圍欄的移動應用
  • 可穿戴設備或物聯網裝置追蹤
  • 現場服務或物流軟體

使用建議

  • 電池消耗可能增加
  • 需要使用者權限才能在背景存取
  • iOS 後台模式必須在 Xcode 中啟用
  • Android 前台服務通知是必需的
  • 準確性取決於設備硬體和設定

原始 README

以下為關聯原始碼儲存庫的 README 原文快照,最新內容請造訪原始碼儲存庫。

Background Location

A Flutter plugin to get location updates in the background for both Android and iOS (Requires iOS 10.0+). Uses CoreLocation for iOS and FusedLocationProvider for Android

Getting Started

1: Add this to your pubspec.yaml file:

dependencies:
  background_location: ^0.13.0

2: Install packages from the command line:

flutter pub get

Alternatively, your editor might support flutter packages get. Check the docs for your editor to learn more.

Configuration

For using background_location package you need to add permissions to use location service. Add these permission to your platform.

iOS Platform Permission

in ios/Runner/Info.plist add:

<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>[Describe your purpose for using this permission]</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>[Describe your purpose for using this permission]</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>[Describe your purpose for using this permission]</string>
<key>UIBackgroundModes</key>
<array>
    <string>fetch</string>
    <string>location</string>
</array>

Note: You need to describe your purpose for using the permission in to string value. If not, attempts to access the resource fail, and might even cause your app to crash. And when publishing to the App Store, this can cause your app to be rejected by Apple. Refer to Provide a purpose string (Apple Docummentation).

Android Platform Permission

In android/app/src/main/AndroidManifest.xml add:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/> 

How to use

Import the package where you wanna use it.

import 'package:background_location/background_location.dart';

Request permissions from the user. You can use permission_handler for this.

Set the notification title, message and icon (Android only). Use await or .then if you wanna start the location service immediately after because it's an asynchronous method

BackgroundLocation.setAndroidNotification(
  title: "Notification title",
  message: "Notification message",
  icon: "@mipmap/ic_launcher",
);

Set the interval between localizations in milliseconds (Android only). Use await or .then if you wanna start the location service immediately after because it's an asynchronous method

BackgroundLocation.setAndroidConfiguration(1000);

Start the location service. This will also ask the user for permission if not asked previously by another package.

// To ensure that previously started services have been stopped, if desired
BackgroundLocation.stopLocationService();

// Then start the service
BackgroundLocation.startLocationService();

Note: There is currently an open issue (#10) where, if the location service is started multiple times, the location callback will get called repeatedly. This can be worked around by calling BackgroundLocation.stopLocationService(); to stop any previous running services (such as from a previous run of the app) before starting a new one.

Start location service by specifying distanceFilter. Defaults to 0 if not specified

BackgroundLocation.startLocationService(distanceFilter : 10);

You can also force the use of Android LocationManager instead of Google's FusedLocationProvider by setting the forceAndroidLocationManager property to true. If not specified, this defaults to false, which uses FusedLocationProvider if it is available, treating LocationManager as a fallback. This setting has no effect on iOS devices.

BackgroundLocation.startLocationService(forceAndroidLocationManager: true);

getLocationUpdates will triggered whenever the location is updated on the device. Provide a callback function to getLocationUpdates to handle location updates.

BackgroundLocation.getLocationUpdates((location) {
  print(location);
});

location is a Class exposing the following properties.

double latitude;
double longitude;
double altitude;
double bearing;
double accuracy;
double speed;
double time;
bool isMock;

To stop listening to location changes you can execute.

BackgroundLocation.stopLocationService();

所屬分類

原始碼儲存庫

使用此套件的專案

暫無相關資料。