Tengo que enviar mis datos de ubicación actuales (lat & long) al servidor periódicamente (por ejemplo, por cada 5 minutos). ¿Hay alguna mejor manera? Sé cómo obtener la ubicación actual & cómo enviar los detalles al servidor. ¿Pero cómo lo repito en intervalos periódicos?Enviar ubicación actual al servidor periódicamente en android
Respuesta
Registre una alarma usando AlarmManager
para despertar después de 5 minutos cuando el usuario abre la aplicación por primera vez. cree un servicio (busque la ubicación y actualice al servidor) para ejecutar cuando la alarma notifique su aplicación. Después de que el servicio finalizó el trabajo, regístrate nuevamente para que se active una alarma después de 5 minutos. de esta manera puedes lograr tu tarea.
ref
Android: How to periodically send location to a server
http://developer.android.com/reference/android/app/AlarmManager.html
http://developer.android.com/reference/android/app/Service.html
primera Edición - Adición de ejemplo de código
Paso 1 - Crear gestor de alarmas y registro de alarma
AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(Main.this, YourWakefulReceiver.class);
bool flag = (PendingIntent.getBroadcast(Main.this, 0,
intent, PendingIntent.FLAG_NO_CREATE)==null);
/*Register alarm if not registered already*/
if(flag){
PendingIntent alarmIntent = PendingIntent.getBroadcast(Main.this, 0,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
// Create Calendar obj called calendar
/* Setting alarm for every one hour from the current time.*/
int intervalTimeMillis = 1000 * 60 * 60; // 1 hour
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,
calander.getTimeInMillis(), intervalTimeMillis,
alarmIntent);
}
Paso 2 - Crear la clase de receptor
public class YourWakefulReceiver extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, SimpleWakefulService.class);
startWakefulService(context, service);
}
}
}
Consigna 3 - Crear la clase de servicio
public class YourService extends IntentService {
private static String tagName = "YourService";
public SimpleWakefulService() {
super("YourService");
}
@Override
protected void onHandleIntent(Intent intent) {
// Start your location
LocationUtil.startLocationListener();
try {
// Wait for 10 seconds
Thread.sleep(1000*10);
} catch (InterruptedException e) {
}
//Stop location listener
LocationUtil.stopLocationListener();
// upload or save location
uploadGps();
SimpleWakefulReceiver.completeWakefulIntent(intent);
}
}
Paso 4 - Servicio de Registro y el receptor
<service android:name="com.envision.ghari.services.YourService"></service>
<receiver android:name="com.envision.ghari.receivers.YourWakefulReceiver"></receiver>
Nota: Este código es entender la implementación. No compilará
Deseo esto la respuesta fue un poco más carnosa. –
también agrega verificación de disponibilidad de red.Si la red no está disponible, almacene las coordenadas localmente y envíelas al servidor cuando la red esté allí – Harsh
, probablemente la mejor manera de comenzar ... –
Como no requiere interacción UI, debe crear un servicio para esto, el servicio invocará el método requestLocationUpdates, en este método, pase el tiempo mínimo del parámetro a 5 minutos.
El uso de BroadcastReceiver es una buena opción para enviar solicitudes periódicas.
Here es un tutorial para usar BroadcastReceiver.
La mejor manera de activar el servicio utilizando el AlarmManager
y publicar la ubicación que obtiene en el servidor.
Estoy desarrollando una aplicación que obtiene la posición del teléfono celular todo el día en 10 y 15 segundos en un servicio, funciona bien pero a veces el método OnLocationChanged del oyente del proveedor de red deja de llamarse.
import android.location.Address;
import android.location.Geocoder;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import java.io.IOException;
import java.util.List;
import foodinn.databases.LocationUpdaterDatabase;
public class LocationUpdatesActivity extends AppCompatActivity {
private LocationUpdaterDatabase locationUpdaterDatabase;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_location_updates);
locationUpdaterDatabase = new LocationUpdaterDatabase(this, "Locations.db", null, 1);
final Geocoder geocoder = new Geocoder(this);
ListView listView = (ListView) findViewById(R.id.locationUpdatesListView);
listView.setAdapter(new SimpleCursorAdapter(this, R.layout.location_updates_list_view_view, locationUpdaterDatabase.getLocationUpdates(), new String[] {"latitude", "longitude", "whenUpdated"}, new int[] {R.id.listViewTextView1, R.id.listViewTextView2, R.id.listViewTextView3}, SimpleCursorAdapter.FLAG_REGISTER_CONTENT_OBSERVER));
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
double latitude = Double.valueOf(((TextView) view.findViewById(R.id.listViewTextView1)).getText().toString());
double longitude = Double.valueOf(((TextView) view.findViewById(R.id.listViewTextView2)).getText().toString());
try {
List<Address> addressList = geocoder.getFromLocation(latitude, longitude, 1);
String address = addressList.get(0).getAddressLine(0); // If any additional address line present than only, check with max available address lines by getMaxAddressLineIndex()
String city = addressList.get(0).getLocality();
String state = addressList.get(0).getAdminArea();
String country = addressList.get(0).getCountryName();
String postalCode = addressList.get(0).getPostalCode();
String knownName = addressList.get(0).getFeatureName();
((TextView) view.findViewById(R.id.listViewTextView4)).setText(address + ", " + city + ", " + country);
} catch (IOException e) {
e.printStackTrace();
}
}
});
}
}
Aunque este fragmento de código puede resolver la pregunta, [incluyendo una explicación] (http: //meta.stackexchange) .com/questions/114762/explaining-entirely-code-based-answers) realmente ayuda a mejorar la calidad de su publicación. Recuerde que usted está respondiendo la pregunta a los lectores en el futuro, y es posible que esas personas no sepan los motivos de su sugerencia de código. –
- 1. android gps ubicación actual
- 2. Cómo encontrar periódicamente la ubicación de GPS en Android
- 3. Android Emulator se reinicia al enviar la ubicación simulada
- 4. Obtención de datos periódicamente (sondeo) desde el servidor en Android
- 5. Android: obtención confiable de la ubicación actual
- 6. Android Handler Periódicamente
- 7. NSURLConnection JSON Enviar al servidor
- 8. Cómo enviar varias imágenes al servidor usando MultipartEntity desde android
- 9. DDMS no puede enviar la ubicación al emulador
- 10. ¿Cómo puedo obtener la ubicación actual en Android programáticamente?
- 11. Marcado de ubicación actual en el mapa, Android
- 12. ¿Cómo obtengo la ubicación actual de GPS programáticamente en Android?
- 13. Ubicación actual en el simulador
- 14. Pérdida de memoria en Android al intentar enviar un formulario con imagen al servidor PHP
- 15. El servicio en segundo plano necesita enviar la ubicación del GPS en el servidor
- 16. Cómo buscar periódicamente dispositivos bluetooth en Android
- 17. Geocodificación inversa Ubicación actual
- 18. ¿Cómo puedo enviar datos JSON al servidor
- 19. Cómo enviar matrices usando XMLHttpRequest al servidor
- 20. Android: icono predeterminado para la ubicación actual del usuario?
- 21. Android ListView ubicación de desplazamiento actual Y píxeles
- 22. Android: obtenga la ubicación actual del mejor proveedor disponible
- 23. ASP .net ubicación física actual
- 24. URL configurable con ACRA para Android al enviar informes al servidor autohospedado?
- 25. ubicación actual sin usar gps
- 26. Enviar contenido de utf8 con el método de envío al servidor en Android usando HttpClient
- 27. cómo subir imágenes al servidor en Android?
- 28. Obtener usuario ubicación actual en MKMapView
- 29. ¿Cómo centrar mi ubicación actual en MKMapView?
- 30. cómo mostrar la ubicación actual en MKMapView
Por favor, mira esto, la aplicación es similar y está funcionando bien, pero necesito ayuda con algunas características que sabrás después de leer mi publicación, y lo siento por responder esta pregunta, no puedo encontrar el opción de comentario. . http://stackoverflow.com/questions/14088095/how-can-i-send-the-gps-and-network-location-cordinates-to-a-server-static-ip/14103445#14103445 – user2010282