Eu tenho uma atividade. Nesta atividade, executei uma assínceta, mas não está funcionando
-
21-09-2019 - |
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 é:
- Publique constantemente a latitude/longitude no meu site a cada minuto.
- 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);
}
Solução
Quebre -o em 3 etapas:
- Faça o que você quiser trabalhar sem asynctask
- Certifique -se de que você descobriu o assíncico, faça um log.e simples ("haha", "gotcha") em
doInBackground(...)
e verifique se isso mostra - 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);