Почему locationManager.getBestProvider () возвращает ноль? (Nexus 5x)

1

Я пытаюсь получить местоположение устройства (Nexus 5x), следуя руководству. Но его не работает, и я узнал, что линия

locationManager.getBestProvider(new Criteria(), false);

всегда возвращает null.

Вот мой манифестный контент:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="lt.wilkas.locationdemo">

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

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>

Вот мой контент onCreate:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //initialize location manager
        locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);

        //get best provider
        provider = locationManager.getBestProvider(new Criteria(), false);

        if (provider == null) {
            Log.i("i", "provider ir null");
        } else {
            Log.i("i", provider);
        }
}

Что я делаю неправильно?

  • 1
    Вам необходимо реализовать разрешения времени выполнения для Android 6.0 и выше.
  • 0
    Да, GPS включен. Спасибо за ведущий Прерак, я поищу как это сделать и обновлю вопрос или сам введу ответ.
Показать ещё 2 комментария
Теги:
android-location

1 ответ

2
Лучший ответ

Есть два способа решить эту проблему.

1) Можно обновить значение targetSdkVersion до уровня ниже 23 в файле build.gradle. Благодаря Beyka.

2) Поскольку "опасные" разрешения Android 6.0 должны не только включаться в файл манифеста, но также запрашиваться подтверждение при запуске приложения (запрос разрешений во время выполнения). Поставщика местоположения следует запрашивать только после получения разрешения пользователя во время выполнения. Благодаря Prerak Sola.

Это большие ресурсы и примеры, как это сделать:

Ещё вопросы

Сообщество Overcoder
Наверх
Меню