Как решить эту проблему «Невозможно включить слой MyLocation, поскольку разрешения на местоположение не предоставлены»?

Я включил на свою флаттер-страницу простой компонент GoogleMap только для того, чтобы посмотреть, работает ли он, но я не могу решить эту проблему. Я компилирую приложение, и когда я перехожу на страницу, я получаю следующую ошибку в консоли:

"E/GoogleMapController( 3376): Cannot enable MyLocation layer as location permissions are not granted"

Я вижу компонент, но не вижу карту (см. изображение):

Как решить эту проблему «Невозможно включить слой MyLocation, поскольку разрешения на местоположение не предоставлены»?

Добавлены конфигурации:

//(AndroidManifest.xml)

<meta-data android:name = "com.google.android.geo.API_KEY" android:value = "apikey"/>

//(pubspec.yaml)
google_maps_flutter: ^0.5.0

РЕДАКТИРОВАТЬ - РЕШЕНИЕ

Добавьте пакет разрешений, чтобы запросить разрешение. Вы можете установить этот пакет для управления вашими разрешениями: https://pub.dartlang.org/packages/permission

10
0
14 987
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

android.permission.ACCESS_FINE_LOCATION считается опасным разрешением. Вы использовали пакет permission для запроса разрешения? https://pub.dartlang.org/packages/permission

Да, я знаю. Это было только для того, чтобы проверить, решает ли это мою проблему. Нет, я добавлю пакет разрешений!

juan_marti 03.04.2019 19:35

Я использовал пакет разрешений, как было предложено. @JuthiSarkerAka

juan_marti 02.10.2019 12:41

Возможно, ваш ключ API не настроен должным образом и не предоставил доступ к службе определения местоположения.

Проверьте и включите эти службы

Если на эмуляторе удалите следующее в файле AndroidМанифест:

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

и хранить:

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

Это сработало для меня. Я также закрыл и перестроил все приложение в эмуляторе.

Начиная с декабрь 2019 г. мне не удалось использовать плагин разрешения. Даже после добавления необходимых данных манифеста и обновления проекта до Android API 29 он все равно возвращался, PermissionStatus.notAgain.

Что действительно сработало, так это добавление плагина разрешения_обработчик с предоставленным ими данные манифеста (только часть местоположения). Кроме того, обновление Android API до версии 29, как подробно описано в здесь, и замена compileSDKVersion и targetSdkVersion в android/app/build.gradle на 29.

Данные Mainfest, непосредственно перед тегом <application> в каталоге android/app/src/main/AndroidManifest.xml

<!-- Permissions options for the `location` group -->
<uses-permission android:name = "android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name = "android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name = "android.permission.ACCESS_BACKGROUND_LOCATION" />

Перезапустите IDE, чтобы все изменения вступили в силу. Затем, чтобы запросить разрешение в вашем приложении:

import 'package:permission_handler/permission_handler.dart';

void setPermissions() async{
   Map<PermissionGroup, PermissionStatus> permissions = 
   await PermissionHandler().requestPermissions([PermissionGroup.location]);
}

Мне удалось решить проблему:

  1. Включение Map SDK в консоли Google.
  2. Остановите работу проекта и выполните команду порхать чисто.
  3. Удалите приложение с устройства и запустите его снова.

Включите этот оператор if в свою основную функцию перед запуском виджета Stateless/Stateful в runApp().

void main() {
if (defaultTargetPlatform == TargetPlatform.android) {
AndroidGoogleMapsFlutter.useAndroidViewSurface = true;
  }
runApp(LocationPage());
} 

Если у вас возникнут новые проблемы, проверьте журнал на наличие ссылок, которые помогут настроить ваш проект с помощью Google Maps SDK. Пошаговые процедуры просты для понимания и понимания. Дайте мне знать, если у вас есть какие-либо проблемы.

Другие вопросы по теме