Comment puis-je invoquer une méthode toutes les 5 secondes dans android?
Je travaille dans une application qui doit envoyer une localisation par GPS, toutes les 5 secondes sur le serveur lorsque je choisis (auto bouton envoyer sur). Je suis nouveau avec android donc je ne sais pas comment je peux faire un bouton on/off et comment puis-je invoquer la méthode qui envoie les données toutes les 5 secondes lorsque le bouton est sur.
La méthode qu'elle doit appeler toutes les 5 secondes:
public void postData() throws ClientProtocolException, IOException, Exception {
String longitude="UK";
String latitude="UK";
String altitiude="UK";
String time="";
String speed="";
getCurrentLocation(); //gets the current location and update mobileLocation variables
if (mobileLocation != null) {
locManager.removeUpdates(locListener); //This needs to stop getting the location data and save the battery power.
longitude = ""+mobileLocation.getLongitude();
latitude = "" + mobileLocation.getLatitude();
altitiude = "" + mobileLocation.getAltitude();
String accuracy = "Accuracy" + mobileLocation.getAccuracy();
time = "" + mobileLocation.getTime();
speed =""+ (int)(4*mobileLocation.getSpeed());
editTextShowLocation.setText(longitude + "\n" + latitude + "\n"
+ altitiude + "\n" + accuracy + "\n" + time+ "\n" + speed);
} else {
editTextShowLocation.setText("Sorry, location is not determined");
}
String url = "http://www.itrack.somee.com/post.aspx?id="+"f1"+"&long="+longitude+"&lat="+latitude+"&alt="+altitiude+"&speed="+speed;
//Create a new HttpClient and Post Header
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(url);
try {
//Execute HTTP Post Request
HttpResponse response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
//TODO Auto-generated catch block
} catch (IOException e) {
//TODO Auto-generated catch block
}
}
InformationsquelleAutor Fadi Khalil | 2012-11-16
Vous devez vous connecter pour publier un commentaire.
Que j'ai rencontré exactement le même problème, l'envoi de lieu périodiquement. J'ai utilisé un gestionnaire et ses
postDelayed
méthode.L'appel périodique d'une partie de mon code ressemble à ceci:
Ensuite, vous avez juste besoin de faire appel
scheduleSendLocation
lorsque vous souhaitez commencer votre période d'appels.Ridcully est droit, il n'y a probablement aucune raison d'envoyer l'emplacement actuel toutes les 5 secondes. Voici le rationnel derrière que:
Vous vraiment ne se soucient 2 choses à propos de la position:
Où sont-ils maintenant?
Ont-ils déménagé depuis j'ai eu leur premier emplacement?
Donc, une fois que vous obtenez une satisfaisante emplacement initial, vous pouvez simplement vous inscrire pour recevoir des rappels à chaque fois que les utilisateurs se déplace comme ceci:
Cela étant dit, vous pouvez évidemment faire ce que les autres ont dit et exécuter le timer toutes les 5 secondes. La chose est, la plupart des bons endroits prendra de 10 à 20 secondes à s'exécuter, de sorte que vous pourriez ne voulez exécuter dans cet intervalle. Aussi pour info, cela VA tuer la batterie
Regarder la AlarmManager classe http://developer.android.com/reference/android/app/AlarmManager.html et en particulier la setRepeating fonction. Sa va être un peu plus compliqué que vous ne le voulez bien.
Vous pouvez utiliser un
Timer
. Mais je pense qu'il serait mieux si vous n'envoyez que la position de la il a changé d'une certaine distance de la dernière que vous avez envoyé. De cette façon, vous souhaitez envoyer beaucoup moins de données sans perte d'information.