颤动:地理定位器错误?警告?[CoreLocation] 如果调用此方法,可能会导致 UI 无响应...。我无法获取 GPS 信息

jts*_*soc 5 xcode ios dart flutter

我正在 Flutter 中进行开发,并尝试使用 geolocator 包获取 GPS 信息。

\n

我能够在模拟器上毫无问题地获取 GPS 信息,但是当我在实际设备上启动该应用程序时,我无法获取 GPS。\n该应用程序工作正常,因此不是错误,但有一条消息。

\n

“如果在主线程上调用此方法可能会导致 UI 无响应。相反,请考虑等待 -locationMana gerDidChangeAuthorization:回调并首先检​​查授权状态。”

\n

Flutter 端的代码

\n
Future<Position> getGps(BuildContext context) async {\n    return await Geolocator.getCurrentPosition(\n      desiredAccuracy: LocationAccuracy.high,\n      timeLimit: Duration(seconds: 5),\n    );\n}\n
Run Code Online (Sandbox Code Playgroud)\n

(警告)IOS端的代码

\n
    - (ServiceStatus)checkServiceStatus:(PermissionGroup)permission {\n        return [CLLocationManager locationServicesEnabled] ? ServiceSttus Enabled\n            : ServiceStatusDisabled;\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

2023/1/26 添加

\n

我已将其添加到 info.plist 中。尽管如此,我还是没有得到 GPS 信息。

\n

信息列表

\n
<key>NSLocationAlwaysUsageDescription</key>\n<string>Access location information to get a location</string>.\n<key>NSLocationWhenInUseUsageDescription</key>\n<string>Access location information to get location</string>\n
Run Code Online (Sandbox Code Playgroud)\n

如何获取 GPS 信息?\n已授予获取位置服务的权限。

\n

iOS:16.2\nxcode: 14\n地理定位器: 7.7.1

\n

2023/1/26 添加

\n

当前状态

\n

模拟器(Android)\xe3\x80\x80...\xe3\x80\x87(已获取GPS信息)

\n

模拟器(iOS(iphone SE2)) ...\xe3\x80\x87(已获取GPS信息。)

\n

实际设备(iOS(iphone SE2)) ...\xc3\x97 (无法获取GPS)

\n

Min*_*ace 0

尝试这个

  1. 在“pubspec.yaml”中添加“location_permissions:3.0.0+1”此依赖项。请注意,我对 flutter 1.22.0 执行了此操作,因此对于 flutter 2.0 这可能是一个问题。

  2. 导入文件中的包

    import 'package:location_permissions/location_permissions.dart';
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在您想要请求权限的页面上添加以下代码。(最好将其添加到应用程序的第一页。)

    @override
       void initState() {
        ....
       if (Platform.isIOS) {
         location_permission();
       }
       ....
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 在同一个文件中添加以下两个方法

      void location_permission() async {
      final PermissionStatus permission = await _getLocationPermission();
      if (permission == PermissionStatus.granted) {
        final position = await geolocator.getCurrentPosition(
            desiredAccuracy: LocationAccuracy.best);
    
        // Use the position to do whatever...
      }
     }
    
     Future<PermissionStatus> _getLocationPermission() async {
      final PermissionStatus permission = await LocationPermissions()
          .checkPermissionStatus(level: LocationPermissionLevel.location);
    
      if (permission != PermissionStatus.granted) {
        final PermissionStatus permissionStatus = await LocationPermissions()
            .requestPermissions(
                permissionLevel: LocationPermissionLevel.location);
    
        return permissionStatus;
      } else {
        return permission;
      }
     }
    
    Run Code Online (Sandbox Code Playgroud)


归档时间:

查看次数:

3382 次

最近记录:

2 年,10 月 前