Tengo una actividad. En esta actividad, ejecuté un AsyncTask, pero no está funcionando
-
21-09-2019 - |
Pregunta
private class ExecuteLocations extends AsyncTask<String, Void, Void>{
private final ProgressDialog dialog = new ProgressDialog(ListProfiles.this);
protected void onPreExecute() {
//this.dialog.setMessage("Starting pre-execute...");
//this.dialog.show();
}
@Override
protected Void doInBackground(String... arg0) {
check_profiles_lm=(LocationManager) ListProfiles.this.getSystemService(LOCATION_SERVICE);
myLocListen = new LocationListener(){
@Override
public void onLocationChanged(Location location) {
HashMap params = new HashMap();
params.put("lat", Double.toString(location.getLatitude()));
params.put("long", Double.toString(location.getLongitude()));
postData("http://mydomain.com",params);
}
@Override
public void onStatusChanged(String provider, int status,Bundle extras) {
}
@Override
public void onProviderDisabled(String provider) {
}
@Override
public void onProviderEnabled(String provider) {
}
};
check_profiles_lm.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 30000, 0, myLocListen);
return null;
}
protected void onPostExecute(final Void unused) {
if (this.dialog.isShowing()) {
//this.dialog.dismiss();
}
//Do something else here
}
}
Básicamente, mi objetivo es:
- En constante publicar la latitud / longitud a mi página web cada minuto más o menos.
- Por supuesto, yo quiero hacer esto en otro hilo, por lo que no desordenes mi hilo de interfaz de usuario. Este AsyncTask se supone que debe resolver ese ... pero es la crianza de un error y no sé qué.
¿Qué se puede hacer para lograr mi objetivo? Es muy simple ... ubicación a la exploración y posterior a la web cada minuto, en el fondo.
Por cierto, mi método onCreate es así. Eso es básicamente la misma.
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
new ExecuteLocations().execute();
setContentView(R.layout.main_list);
}
Solución
dividirlo en 3 pasos:
- Realice los que desea trabajar trabajo w / o AsyncTask
- Asegúrese de que haya descubierto AsyncTask, hacer una simple Log.e ( "jaja", "Gotcha") en
doInBackground(...)
y comprobar que se muestra - Combinar los dos.
En este caso, probablemente me vaya con un Service
provocada por AlarmManager
. Supongo que necesitará el último de todos modos.
Otros consejos
Crea esto como un servicio. No es necesario tener un temporizador o AlarmManager como se registre para eventos ubicación y actuar en consecuencia.
Un ejemplo de escucha de eventos ubicación se puede encontrar en http : //code.google.com/p/android-bluetooth-on-motion/source/browse/#svn/trunk/BluetoothOnMotion/src/com/elsewhat
locationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, MIN_TIME_NETWORK, MIN_DISTANCE_NETWORK,locationListener);
locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, MIN_TIME_GPS, MIN_DISTANCE_GPS,locationListener);