Как сделать геозоны точными?

У меня проблема с точностью геозон, потому что местоположение пользователя в основном определяется мобильными сетями, что полностью отстой.

Мое приложение использует геозоны вокруг выбранных мест, которые будут выполнять определенные действия, когда пользователь входит в эти места... Я подтверждаю, что мое приложение действительно работает, потому что, когда я открываю карты Google, точность определения местоположения увеличивается, а затем срабатывает моя геозона.

Мое текущее решение использует диспетчер местоположения с провайдером GPS, который получает местоположение каждую минуту, но, похоже, это влияет на срок службы батареи и через некоторое время останавливается.

Мой вопрос: есть ли способ сделать геозоны с точностью до радиуса 60 м, например? Или есть ли способ получить точное обновление местоположения пользователя?

заранее спасибо


person Turki Alkhateeb    schedule 02.08.2015    source источник
comment
Вы можете использовать данные GSM и GPS вместе, чтобы повысить эффективность определения местоположения. Хороший пример определения местоположения с помощью GPS можно найти здесь, stackoverflow.com/questions/6181704/   -  person Prokash Sarkar    schedule 02.08.2015
comment
Спасибо, но мое приложение требует мгновенного срабатывания геозон. Мне не нужно получать местоположение каждые 30 минут или около того   -  person Turki Alkhateeb    schedule 02.08.2015
comment
is there a way to make geofences accurate to a 60 mO. Вопрос неверен, поскольку он зависит только от точности поставщика местоположения. Чипы GPS в смартфонах не так хороши. Но 60 метров это плохо. Многие телефоны работают на расстоянии 15 м или меньше.   -  person greenapps    schedule 02.08.2015


Ответы (1)


Вы получите лучшее представление о точности, следуя этой теме:

Как повысить точность предупреждений Geo Fencing в Android

Как только вы создадите свою геозону, вы можете начать пинговать свой GPS, пока не получите переход ENTER. Я попробовал этот способ, и я получил лучшую точность.

Простой сервис для пинга GPS:

public class GPSService extends Service implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener, LocationListener {

GoogleApiClient mGoogleApiClient;
LocationRequest locationRequest;

public GPSService() {
}

@Override
public IBinder onBind(Intent intent) {
    // TODO: Return the communication channel to the service.
    throw new UnsupportedOperationException("Not yet implemented");
}

@Override
public void onCreate() {
    super.onCreate();


    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(LocationServices.API)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this)
            .build();

    mGoogleApiClient.connect();


}

@Override
public void onLocationChanged(Location location) {


    Utility.ReadAndWriteData(this, Utility.readFileName(this), "Still Geofence is not triggered!!!");

}

@Override
public void onConnected(Bundle bundle) {

    locationRequest = LocationRequest.create();
    locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
    locationRequest.setFastestInterval(1000);
    locationRequest.setInterval(2000);
    LocationServices.FusedLocationApi.requestLocationUpdates(mGoogleApiClient,locationRequest,this);

}

@Override
public void onConnectionFailed(ConnectionResult connectionResult) {

}

@Override
public void onConnectionSuspended(int i) {

}

@Override
public void onDestroy() {
    super.onDestroy();

    if(mGoogleApiClient.isConnected()) {

        LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient, this);

    }
} 
person Jai    schedule 02.08.2015
comment
Мое приложение всегда работает в фоновом режиме, поэтому я думаю, что опрос GPS всегда влияет на время автономной работы, как я описал выше ... Мне нужно знать, как точно пинговать GPS, должен ли я делать это с помощью диспетчера местоположений? Какое минимальное время и минимальное расстояние я должен установить? - person Turki Alkhateeb; 02.08.2015
comment
@Dev: На самом деле вам нужно пинговать GPS только до тех пор, пока ваша текущая геозона не сработает с переходом ENTER. Поэтому, когда вы будете писать код для создания геозоны после ее создания, вы начнете пинговать свой GPS. Как только вы получите переход ENTER, вы должны перестать его пинговать. Вот и все. Как вы упомянули, радиус 60 м очень меньше в случае геозоны, поэтому, если вы можете увеличить его, сделайте его не менее 500 м. Таким образом, у вас будет лучший результат, потому что в меньшем радиусе он не мог отслеживать переход. - person Jai; 02.08.2015
comment
@Dev: добавлен простой сервисный вызов выше - person Jai; 02.08.2015
comment
Что, если пользователь вошел в другую геозону? Приложение не будет работать в этом случае, потому что я регистрирую 20 геозон, которые находятся рядом с местоположением пользователя. - person Turki Alkhateeb; 02.08.2015
comment
Кроме того, установка большего радиуса будет правильно вызывать переходы входа и выхода? - person Turki Alkhateeb; 02.08.2015
comment
@Dev: Вы можете отслеживать каждую геозону, используя идентификатор геозоны, верно? При создании геозоны независимо от передаваемого вами уникального идентификатора вы можете проверить тот же идентификатор, когда каждая геозона будет иметь переход ENTER. - person Jai; 02.08.2015
comment
@Dev: Да, делая больший радиус, у вас будет лучший результат о переходах. - person Jai; 02.08.2015
comment
Я только что увидел ваше редактирование, и спасибо, чувак, я думаю, что это сработает! Я вернусь завтра, и я скажу вам результаты, большое спасибо - person Turki Alkhateeb; 02.08.2015
comment
И последний вопрос: я предпочитаю запускать сервисы, а не привязываться к ним... будет ли этот сервис когда-нибудь убит? Потому что я использовал диспетчер местоположения с провайдером GPS, и через некоторое время он отключился. - person Turki Alkhateeb; 02.08.2015
comment
@Dev: используйте FusedLocationAPI вместо диспетчера местоположений, так как вам просто нужно взять последнее известное местоположение. И да, именно поэтому я использовал только сервис ping, чтобы вы могли легко запускать и останавливать его, когда захотите. - person Jai; 02.08.2015
comment
Привет @Jai, я собираюсь попробовать это сегодня :) - person Rahul Upadhyay; 11.10.2017
comment
@RahulUpadhyay: Круто, у тебя будет лучший опыт :) Дай мне знать потом! - person Jai; 11.10.2017