Pergunta

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 
    }

}

Basicamente, meu objetivo é:

  1. Publique constantemente a latitude/longitude no meu site a cada minuto.
  2. Claro, eu quero fazer isso em outro tópico, para que ele não estrague meu tópico da interface do usuário. Esta assíncada deve resolver isso ... mas está trazendo um erro e eu não sei por quê.

O que você pode fazer para alcançar meu objetivo? É muito simples ... apenas digitalize a localização e poste na Web a cada minuto, em segundo plano.

A propósito, meu método OnCreate é assim. É basicamente isso.

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
            new ExecuteLocations().execute();
            setContentView(R.layout.main_list);
    }
Foi útil?

Solução

Quebre -o em 3 etapas:

  1. Faça o que você quiser trabalhar sem asynctask
  2. Certifique -se de que você descobriu o assíncico, faça um log.e simples ("haha", "gotcha") em doInBackground(...) e verifique se isso mostra
  3. Combine os dois.

Para este caso, eu provavelmente iria com um Service acionado por AlarmManager. Acho que você precisará do último de qualquer maneira.

Outras dicas

Crie isso como um serviço. Não há necessidade de ter um timer ou alarmanager enquanto você se registra para eventos de localização e age adequadamente.

Um exemplo de ouvir eventos de localização pode ser encontrado emhttp://code.google.com/p/android-bruetooth-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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top