2017-08-30 3 views
1

J'ai testé l'exemple de Geofence par cn1 où il définit la notification locale. Lorsque l'application est fermée (détruite), elle donne toujours une notification. Mais je veux obtenir l'emplacement par GPS et exécuter connectionRequest pour les enregistrer dans le serveur. J'ai remplacé le code connectionRequest au lieu de LocalNotification dans le code suivant mais cela ne fonctionne pas. Que dois-je faire pour exécuter la connectionRequest lorsque l'application est fermée (pas quand elle est réduite mais détruite) de sorte qu'une fois que l'utilisateur installe et ferme (détruit), l'application envoie ses données de localisation dans le serveur pour toujours est désinstallé.ConnectionRequest lorsque l'application est en arrière-plan

Geofence gf = nouveau Geofence ("test", loc, 100, 100000); LocationManager.getLocationManager(). AddGeoFencing (GeofenceListenerImpl.class, gf);

Geofence avec localNotification:

public class GeofenceListenerImpl implements GeofenceListener { 
    @Override 
    public void onExit(String id) { 
    } 

    @Override 
    public void onEntered(String id) { 
     if(Display.getInstance().isMinimized()) { 
      Display.getInstance().callSerially(() -> { 
       Dialog.show("Welcome", "Thanks for arriving", "OK", null); 
      }); 
     } else { 
      LocalNotification ln = new LocalNotification(); 
      ln.setId("LnMessage"); 
      ln.setAlertTitle("Welcome"); 
      ln.setAlertBody("Thanks for arriving!"); 
      Display.getInstance().scheduleLocalNotification(ln, 10, LocalNotification.REPEAT_NONE); 
     } 
    }  
} 

Pourquoi les éléments suivants doesnot travail? (Il fonctionne uniquement lorsque l'application est en cours d'exécution ou est réduite au minimum, mais pas quand il est détruit.)

public class GeofenceListenerImpl implements GeofenceListener { 
    @Override 
    public void onExit(String id) { 
     System.out.println("geofence onExit"); 
    } 

    @Override 
    public void onEntered(String id) { 
     if(Display.getInstance().isMinimized()) { 
      Display.getInstance().callSerially(() -> { 
       System.out.println("geofence isMinimized"); 
      }); 
     } else { 
      System.out.println("geofence when app is closed"); 
      //I want to run connectionRequest here but is not working 
     } 
    }  
} 

PS. J'ai utilisé l'extraction d'arrière-plan, mais cela ne fonctionne que lorsque l'application est réduite.

Update1: Demo de la façon dont je connectionRequest en dehors de la méthode réduit() ...

public class GeofenceListenerImpl implements GeofenceListener { 
    @Override 
    public void onExit(String id) { 
     System.out.println("geofence onExit"); 
    } 

    @Override 
    public void onEntered(String id) { 
     if(Display.getInstance().isMinimized()) { 
      Display.getInstance().callSerially(() -> { 
      }); 
     } else { 
      System.out.println("geofence when app is closed"); 
      Connection c = new Connection(); 
      c.liveTrackConnectionMethod("22" , "23"); 
     } 
    }  
} 

classe Connection

public class Connection { 

    ArrayList<Map<String, Object>> response; 
    public void liveTrackConnectionMethod(String lat, String lon) { 

     ConnectionRequest cr = new ConnectionRequest() { 

      @Override 
      protected void readResponse(InputStream input) throws IOException { 
       JSONParser jSONParser = new JSONParser(); 
       Map parser = jSONParser.parseJSON(new InputStreamReader(input)); 
       response = null; 
      } 
     }; 
     cr.setPost(true); 
     cr.setUrl("http://url.com"); 
     cr.addArgument("userid", Preferences.get(AllUrls.userIdPreference, null)); 
     cr.addArgument("lat", lat + ""); 
     cr.addArgument("long", lon + ""); 
     cr.addRequestHeader("Accept", "application/json"); 
     NetworkManager.getInstance().addToQueueAndWait(cr); 
    } 
} 
+0

Est-ce que 'c.liveTrackConnectionMethod (" 22 "," 23 ")' fonctionne en dehors de ifelse? – Diamond

+0

ça marche à l'intérieur si ... – beck

Répondre

1

Je pense qu'une application va toujours revenir false pour isMinimized() quand l'application est fermée ou minimisée (c'est-à-dire qu'elle ne fonctionne pas actuellement au premier plan) Je peux me tromper à ce sujet.

Essayez d'appeler votre script connectionRequest en dehors du isMinimized(). Après tout, vous voulez garder une trace de l'emplacement de l'utilisateur, qu'ils utilisent l'application ou non.

Votre première solution avec LocalNotification montrera aux utilisateurs une notification en appelant la partie else, plutôt que le Dialog quand ils utilisent l'application, parce que isMinimized() sera false.

+0

ouaish je l'ai fait. J'ai System.out.println ("geofence quand l'application est fermée") dans une autre partie de isMinimized(). Pendant le débogage, je ne le vois pas après la fermeture de l'application. J'ai essayé ConnectionRequest ici aussi mais aucun effet. – beck

+0

Il pourrait y avoir un problème avec le script 'ConnectionRequest'. Postez votre extrait dans la réponse pour plus de clarté. Supprimer les données sensibles – Diamond

+0

Salut, il y a update1 avec le script connectionRequest ci-dessus. Et cela fonctionne avant que l'application ne soit fermée (c'est-à-dire fonctionne avant que je l'enlève de l'arrière-plan aussi). J'ai le même code de connexion dans la méthode minimisée ainsi – beck