2016-04-20 7 views
1

Я пытаюсь реализовать геообъектив для своего кодового имени одним приложением. Я делаю все, как указано в примере на github, но мои методы ввода и выхода, похоже, не срабатывают. Я включил GPlayServices в подсказки построения, а также android.playService. * И ios.locationUsageDescription.Codename one Geofencing not firing

Я пробовал проверить его как с iOS, так и с Android-устройством.

Ниже мой код

В методе OnStart()

public void start() { 
    if(current != null){ 
     current.show(); 
     return; 
    } 
    u = new UIBuilder(); 
    Display.getInstance().lockOrientation(true); 

    Location loc = new Location(); 
    loc.setLatitude(-26.15739); 
    loc.setLongitude(28.127099999999928); 
    Geofence gf = new Geofence("test", loc, 1000, 100000); 

LocationManager.getLocationManager().addGeoFencing(GeofenceListenerImpl.class, gf); 

    if (Preferences.get("userId", "error").equals("error")) { 
     setUpLoginForm(); 
    } else { 
     setUpMainPage(); 
    } 
} 

Реализация

public class GeofenceListenerImpl implements GeofenceListener { 

public GeofenceListenerImpl() { 

} 

public void onExit(String id) { 
    if(Display.getInstance().isMinimized()) { 
     LocalNotification ln = new LocalNotification(); 
     ln.setId("LnMessage1"); 
     ln.setAlertTitle("Welcome"); 
     ln.setAlertBody("Thanks for arriving! isminimized"); 
     Display.getInstance().scheduleLocalNotification(ln, System.currentTimeMillis() + 1000, LocalNotification.REPEAT_NONE); 
    } else { 
     Display.getInstance().callSerially(new Runnable(){ 
      public void run() { 
       Dialog.show("Welcome", "Thanks for arriving notminimized ", "OK", null); 
      } 
     }); 
    } 
} 

public void onEntered(String id) { 
    if(Display.getInstance().isMinimized()) { 
     LocalNotification ln = new LocalNotification(); 
     ln.setId("LnMessage2"); 
     ln.setAlertTitle("Welcome"); 
     ln.setAlertBody("Thanks for arriving! isminimized"); 
     Display.getInstance().scheduleLocalNotification(ln, 
System.currentTimeMillis() + 1000, LocalNotification.REPEAT_NONE); 
    } else { 
     Display.getInstance().callSerially(new Runnable(){ 
      public void run() { 
       Dialog.show("Welcome", "Thanks for arriving 
notminimized ", "OK", null); 
      } 
     }); 
    } 
} 

} 
+0

Что такое полный код вашего основного класса? – Chen

+0

@Chen Я добавил его ... – Kyri33

ответ

1

После копаться гугле я узнал, что я должен добавить сборки подсказку: ios.background_modes = location, и теперь, когда приложение открыто в первый раз на устройстве, он запрашивает у пользователя разрешение опроса своего местоположения в фоновом режиме. Однако геозонность все еще не срабатывает, но я буду играть с моими значениями. Есть ли аналогичный сборник для Android? Потому что на устройстве Android он все равно даже не потянет место.

+0

Возможно, что 10 метров недостаточно велики для регистрации или координаты недостаточно точны. Geofencing - очень грубый API, предназначенный для работы в фоновом режиме, поэтому для его проверки вам действительно нужно двигаться. –

+0

@ShaiAlmog Мой третий параметр - 100. Так что не 100 метров, не 10 ??? Или вы имели в виду 100? – Kyri33

+0

Возможно, вместо использования фиксированного местоположения используйте getCurrentLocationSync()? –