Question

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 
    }

}

En fait, mon objectif est:

  1. Publier constamment la latitude / longitude sur mon site toutes les minutes.
  2. Bien sûr, je veux le faire dans un autre thread, donc il ne pas gâcher mon thread d'interface utilisateur. Ce AsyncTask est censé résoudre ... mais il est une erreur élever et je ne sais pas pourquoi.

Que pouvez-vous faire pour atteindre mon objectif? Il est très simple ... emplacement juste analyse et courrier à Internet chaque minute, en arrière-plan.

Par ailleurs, ma méthode onCreate est comme ça. C'est essentiellement cela.

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
            new ExecuteLocations().execute();
            setContentView(R.layout.main_list);
    }
Était-ce utile?

La solution

Détaillez en 3 étapes:

  1. tout ce que vous voulez travailler travail w / o AsyncTask
  2. Assurez-vous que vous avez compris AsyncTask, faire un simple Log.e ( "haha", "Gotcha") dans doInBackground(...) et vérifiez qu'il affiche
  3. Combiner les deux.

Dans ce cas, je serais probablement aller avec un Service déclenché par AlarmManager. Je imagine que vous aurez besoin de celui-ci de toute façon.

Autres conseils

Créer cela comme un service. Pas besoin d'avoir une minuterie ou AlarmManager que vous vous inscrivez pour les événements de localisation et d'agir de manière appropriée.

Un exemple d'écoute des événements de localisation se trouve à 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);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top