Я создал свой собственный класс Java для обработки места:Странная ошибка в коде, чтобы получить текущее местоположение с андроида
public class MyLocationHandler extends Service implements LocationListener {
......
public Location getLocation() {
try {
locationManager = (LocationManager) mContext.getSystemService(LOCATION_SERVICE);
// getting GPS status
isGPSEnabled = locationManager
.isProviderEnabled(LocationManager.GPS_PROVIDER);
// getting network status
isNetworkEnabled = locationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
if (!isGPSEnabled && !isNetworkEnabled) {
// no network provider is enabled
} else {
this.canGetLocation = true;
// First get location from Network Provider
if (isNetworkEnabled) {
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("Network", "Network");
if (locationManager != null) {
location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
// if GPS Enabled get lat/long using GPS Services
if (isGPSEnabled) {
if (location == null) {
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_BW_UPDATES, MIN_DISTANCE_CHANGE_FOR_UPDATES, this);
Log.d("GPS Enabled", "GPS Enabled");
if (locationManager != null) {
location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
if (location != null) {
latitude = location.getLatitude();
longitude = location.getLongitude();
}
}
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
return location;
}
.......
}
И это выдержка из build.gradle
:
android {
compileSdkVersion 23
buildToolsVersion "24.0.0"
defaultConfig {
applicationId "com.mobile.appoperator"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
ПРОБЛЕМА: Проблема в том, что мне нужно добавить checkSelfPermission
, но это не действие, и если я его добавлю, я не могу запустить приложение на Android версии старше api lvl 23.
Итак, как я могу справиться с этой проблемой?
Ответы в этой теме могут быть полезны для ya: http://stackoverflow.com/questions/32292675/how-to-request-permissions-from-a-service-in-android-marshmallow. FWIK, без использования библиотек, вы не можете запрашивать разрешения без доступа к активности. С помощью библиотеки поддержки android support-v4 вы можете запросить разрешения в своих фрагментах и действиях обратно совместимым образом с помощью ContextCompat, FragmentCompat и ActivityCompat. Если вы не можете найти способ запроса разрешений в своей службе, я бы вместо этого рекомендовал запрашивать разрешения для первого запуска в вашей деятельности или фрагменте. –