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:

  1. En constante publicar la latitud / longitud a mi página web cada minuto más o menos.
  2. 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);
    }
¿Fue útil?

Solución

dividirlo en 3 pasos:

  1. Realice los que desea trabajar trabajo w / o AsyncTask
  2. Asegúrese de que haya descubierto AsyncTask, hacer una simple Log.e ( "jaja", "Gotcha") en doInBackground(...) y comprobar que se muestra
  3. 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);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top