Я пытаюсь получить местоположение устройства (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) Можно обновить значение targetSdkVersion
до уровня ниже 23 в файле build.gradle. Благодаря Beyka.
2) Поскольку "опасные" разрешения Android 6.0 должны не только включаться в файл манифеста, но также запрашиваться подтверждение при запуске приложения (запрос разрешений во время выполнения). Поставщика местоположения следует запрашивать только после получения разрешения пользователя во время выполнения. Благодаря Prerak Sola.
Это большие ресурсы и примеры, как это сделать: