Мое приложение не запрашивает разрешение на определение местоположения, и разрешение автоматически отклоняется

Я запросил разрешение на местоположение в моем файле манифеста следующим образом:

      <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>

Я также запросил разрешение времени выполнения следующим образом:

          //get location permission
    int locationPermissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION);

    if (locationPermissionCheck != PackageManager.PERMISSION_GRANTED) {
        Toast.makeText(mContext, "Location permission denied", Toast.LENGTH_SHORT).show();
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_FINE_LOCATION);
    } else {
        Toast.makeText(mContext, "Location permission granted", Toast.LENGTH_SHORT).show();
    }

Когда я устанавливаю приложение из студии Android на подключенное устройство (Android 10), я не вижу запроса о местоположении, вместо этого я вижу всплывающее сообщение «Разрешение на местоположение отклонено». Затем я перехожу к разрешению приложения и вижу, что разрешение на местоположение отклонено. Затем я разрешаю, закрываю приложение и снова открываю его, и тогда оно работает. Затем я удаляю приложение и снова устанавливаю. И тогда разрешение на местоположение снова автоматически отклоняется, даже до того, как я запустил приложение.

Я запрашиваю разрешение времени выполнения у MainActivty и использую Fused Location в службе переднего плана. Я старался

      ((ActivityManager)context.getSystemService(ACTIVITY_SERVICE)).clearApplicationUserData();

без везения.

1 ответ

На Android 10 (уровень API 29) и выше необходимо объявить ACCESS_BACKGROUND_LOCATIONразрешение в манифесте вашего приложения для запроса доступа к фоновому местоположению во время выполнения. В более ранних версиях Android, когда ваше приложение получает доступ к местоположению на переднем плане, оно также автоматически получает доступ к местоположению в фоновом режиме.

      <manifest ... >
  <!-- Required only when requesting background location access on
       Android 10 (API level 29) and higher. -->
  <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>

Посетите документацию по местоположению Android, чтобы узнать больше.

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