发生异常。 PermissionDeniedException(用户拒绝访问设备位置的权限。)

问题描述 投票:0回答:3

一切正常,但它说:

Exception has occurred.
PermissionDeniedException (User denied permissions to access the device's location.)

并在调试时显示这一行:

Position position = await Geolocator.getCurrentPosition(
这里的权限:

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

这是完整代码:

import 'package:cloud_firestore/cloud_firestore.dart';
import 'package:flutter/material.dart';
import 'package:google_maps_flutter/google_maps_flutter.dart';
import 'package:geolocator/geolocator.dart';
import 'dart:async';

// ignore: constant_identifier_names
const double ZOOM = 1;

class HomeView extends StatelessWidget {
  static GoogleMapController? _googleMapController;
  Set<Marker> markers = Set();
  // ignore: prefer_final_fields, unused_field
  Completer<GoogleMapController> _controllerGoogleMap = Completer(); //BURADAN
  late GoogleMapController newGoogleMapController;

  late Position currentPosition;
  var geoLocator = Geolocator();
  double bottomPaddingOfMap = 0;

  void locatePosition() async {
    //USER SURRENT LOCATION
    Position position = await Geolocator.getCurrentPosition(
        desiredAccuracy: LocationAccuracy.high);
    currentPosition = position;

    LatLng latLatPosition = LatLng(position.latitude, position.longitude);

    CameraPosition cameraPosition =
        // ignore: unnecessary_new
        new CameraPosition(target: latLatPosition, zoom: 14);
    newGoogleMapController
        .animateCamera(CameraUpdate.newCameraPosition(cameraPosition));
  }

  // ignore: unnecessary_const, unused_field
  static const CameraPosition _kGooglePlex = const CameraPosition(
    target: LatLng(40.7956, 29.4420),
    zoom: 14.4746,
  );

  @override
  Widget build(BuildContext context) {
    return SafeArea(
      child: StreamBuilder<QuerySnapshot>(
        stream: FirebaseFirestore.instance.collection("Location").snapshots(),
        builder: (context, snapshot) {
          // ignore: avoid_print
          print(snapshot);
          if (snapshot.hasData) {
            GeoPoint location = snapshot.data!.docs.first.get("location");
            if (location == null) {
              return const Text("There was no location data");
            }
            markers.clear();

            final latLng = LatLng(location.latitude, location.longitude);
            markers.add(
                Marker(
                  markerId: const MarkerId("location"),
                   position: latLng,
                   infoWindow: const InfoWindow(
                     title: 'dede',
                     snippet: 'deedci'
                   ),
                   ));  
            _googleMapController?.animateCamera(CameraUpdate.newCameraPosition(
              CameraPosition(
                target: latLng,
                zoom: ZOOM,
              ),
            ));

            return GoogleMap(
              padding: EdgeInsets.only(bottom: bottomPaddingOfMap),
              mapType: MapType.normal,
              myLocationButtonEnabled: true,
              markers: markers,
              initialCameraPosition: _kGooglePlex,
              myLocationEnabled: true,
              zoomGesturesEnabled: true,
              zoomControlsEnabled: true,
              onMapCreated: (GoogleMapController controller) {
                _controllerGoogleMap.complete(controller);
                newGoogleMapController = controller;

                locatePosition();
              },
            );
          }
          return const Center(
            child: CircularProgressIndicator(),
          );
        },
      ),
    );
  }
}
flutter dart
3个回答
3
投票

在 ((getCurrentPosition)) 之前添加这些行以使其请求许可

bool serviceEnabled;
LocationPermission permission;

serviceEnabled = await Geolocator.isLocationServiceEnabled();
if (!serviceEnabled) {
  return Future.error('Location services are disabled');
}

permission = await Geolocator.checkPermission();
if (permission == LocationPermission.denied) {
  permission = await Geolocator.requestPermission();
  if (permission == LocationPermission.denied) {
    return Future.error('Location permissions are denied');
  }
}

if (permission == LocationPermission.deniedForever) {
  return Future.error(
      'Location permissions are permanently denied, we cannot request permissions.');
}

2
投票

在您的模拟器或手机中,尝试进入应用程序设置并转到您正在制作的应用程序的详细信息。
在那里你应该能够在你的设备中设置应用程序的权限。
最后,您必须在权限部分看到您的应用能够到达您的位置,但被拒绝了。
只需设置允许的权限即可完成!


0
投票

添加位置权限

LocationPermission permission = await Geolocator.requestPermission();

这里是完整的代码:-

void getLocation() async {
LocationPermission permission = await Geolocator.requestPermission();
Position position = await Geolocator.getCurrentPosition(
    desiredAccuracy: LocationAccuracy.low);

}
© www.soinside.com 2019 - 2024. All rights reserved.