0
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 
    } 

} 

Au fond, mon objectif est:J'ai une activité. Dans cette activité, j'exécuta un AsyncTask, mais il ne fonctionne pas

  1. publier en permanence la latitude/longitude sur mon site toutes les minutes.
  2. Bien sûr, je veux le faire dans un autre thread, afin qu'il ne gâche pas mon thread d'interface utilisateur. Cette asyncTask est supposée résoudre ça ... mais ça fait une erreur et je ne sais pas pourquoi.

Que pouvez-vous faire pour atteindre mon objectif? C'est très simple ... il suffit de numériser l'emplacement et de publier sur le Web chaque minute, en arrière-plan. A propos, ma méthode onCreate est comme ça. C'est essentiellement ça.

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

Répondre

1

Pause dans 3 étapes:

  1. Faire 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érifier qu'il montre
  3. Combiner les deux.

Pour ce cas, j'irais probablement avec un Service déclenché par AlarmManager. Je suppose que vous aurez besoin de ce dernier de toute façon.

0

Créer comme un service. Pas besoin d'avoir un Timer ou un AlarmManager lorsque vous vous enregistrez pour des événements de localisation et agissez correctement.

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);