flutter - 如何在 flutter 中为 ios 和 android 检测模拟位置

标签 flutter dart mock-location

我在我的屏幕上使用位置包和谷歌地图 flutter ,我想检测用户是否使用假 gps。是否有一个包可以在 android 和 ios 中检测 flutter 中的模拟位置?我曾尝试使用 TrustFall 包,但我的应用程序总是意外关闭.. 是否有另一种方法来检测 flutter 中的模拟位置?

最佳答案

您可以使用 TrustLocation

权限:

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

用法 :
import 'package:trust_location/trust_location.dart';

/* Assuming in an async function */
/// query the current location.
LatLongPosition position = await TrustLocation.getLatLong;

/// check mock location on Android device.
bool isMockLocation = await TrustLocation.isMockLocation;

使用 Steam :
// input seconds into parameter for getting location with repeating by timer.
// this example set to 5 seconds.
TrustLocation.start(5);

/// the stream getter where others can listen to.
TrustLocation.onChange.listen((values) =>
print('${values.latitude} ${values.longitude} ${values.isMockLocation}')
);

/// stop repeating by timer
TrustLocation.stop();

例子:
import 'package:flutter/material.dart';
import 'dart:async';

import 'package:flutter/services.dart';
import 'package:trust_location/trust_location.dart';

import 'package:location_permissions/location_permissions.dart';

void main() => runApp(MyApp());

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _latitude;
  String _longitude;
  bool _isMockLocation;

  /// initialize state.
  @override
  void initState() {
    super.initState();
    requestLocationPermission();
    // input seconds into parameter for getting location with repeating by timer.
    // this example set to 5 seconds.
    TrustLocation.start(5);
    getLocation();
  }

  /// get location method, use a try/catch PlatformException.
  Future<void> getLocation() async {
    try {
      TrustLocation.onChange.listen((values) => setState(() {
        _latitude = values.latitude;
        _longitude = values.longitude;
        _isMockLocation = values.isMockLocation;
      }));
} on PlatformException catch (e) {
  print('PlatformException $e');
}
}

  /// request location permission at runtime.
  void requestLocationPermission() async {
    PermissionStatus permission =
        await LocationPermissions().requestPermissions();
    print('permissions: $permission');
    }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Trust Location Plugin'),
        ),
        body: Padding(
          padding: const EdgeInsets.all(20.0),
          child: Center(
          child: Column(
        children: <Widget>[
          Text('Mock Location: $_isMockLocation'),
          Text('Latitude: $_latitude, Longitude: $_longitude'),
         ],
       )),
     ),
   ),
 );
}
}

更多信息可以查看https://pub.dev/packages/trust_location

github链接:https://github.com/wongpiwat/trust-location

关于flutter - 如何在 flutter 中为 ios 和 android 检测模拟位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61789646/

相关文章:

flutter - 为什么 'await'无法在Dart中传递带有built_value的结果?

ios - 如何在 Flutter 应用程序上使用 iOS 显示本地通知?

dart - 在 Dartium 中调试 Dart - 断点关键字?

dart - 禁用向下拖动以关闭 showModalBottomSheet

android - 如何使用 VSCode 获取 FirebaseInstanceId?

dart - 没有 AppBar 的 Flutter TabBar

dart - 在 Dart 对象销毁之前如何做一些事情?

flutter - 检测 flutter 中的模拟位置

android - 在 Android 8.0 (Oreo) 上模拟位置

flutter - 如何防止用户在Flutter Web(PWA)中使用伪造的gps