Olá Pessoal :lol: sou iniciante na programação android estou tendo um problema em construir uma rotina onde a cada 3 minutos uma nova posição deverá ser gravada junto com a data e hora e id referente ao cadastro do usuario.
Usei o TimerTask para crianção da rotina (gravar de 3 em 3 min) o unico problema e que se o GPS mudar de posição “N” vezes, “N” vezes será capturada a posição, alguem pode me ajudar a fazer com que a cada 3 min ele apenas capture uma unica posição sendo ela a posição atual.
Ficarei Grata se alguem me ajuda vou postar o codigo aqui para vcs
Classe GPSActivity
[code]package br.com.android;
import java.io.DataOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;
import java.util.Timer;
import java.util.TimerTask;
import android.app.Activity;
import android.content.Context;
import android.location.Location;
import android.location.LocationListener;
import android.location.LocationManager;
import android.os.Bundle;
import android.widget.TextView;
public class GPSActivity extends Activity {
LocationManager manager;
Location Loc_Atual;
TextView txtLatitude;
TextView txtLongitude;
TextView txtuser;
String VB;
DataOutputStream os;
String user="123@";
String data1 = "dd/MM/yyyy";
String data,hora,hora1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main); // chama tela layout
txtLatitude = (TextView) findViewById(R.id.txtLatitude);
txtLongitude = (TextView) findViewById(R.id.txtLongitude);
txtuser = (TextView) findViewById(R.id.txtuser);
manager = (LocationManager)getSystemService(Context.LOCATION_SERVICE);
}
@Override
protected void onResume() {
super.onResume();
Loc_Atual = manager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
atualizacao();
//Registra as atualizações
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0, 0, listener);
}
private void atualizacao() {
if(Loc_Atual == null){
txtuser.setText("Determinando sua localização...");
} else {
Double latPoint = Loc_Atual.getLatitude();
Double lngPoint = Loc_Atual.getLongitude();
txtLatitude.setText(latPoint.toString());
txtLongitude.setText(lngPoint.toString());
txtuser.setText(user.toString());
// gerador que vai conter a Data atual
java.util.Date agora = new java.util.Date();
SimpleDateFormat formata = new SimpleDateFormat(data1);
data= formata.format(agora);
// gerador que vai conter a hora atual
StringBuilder sb = new StringBuilder();
GregorianCalendar d = new GregorianCalendar();
sb.append( d.get( GregorianCalendar.HOUR_OF_DAY ) );
sb.append( ":" );
sb.append( d.get( GregorianCalendar.MINUTE ) );
hora= sb.toString();
// Variavel que será enviada para o VB via socket TCP/IP
VB = "/POS"+lngPoint+","+latPoint+","+data +","+ hora+","+user;
}
}
public void grava()
{
/*try {
// Envia dados para o VB atraves do Socket
os = new DataOutputStream(ClientActivity.socket.getOutputStream());
os.writeBytes(VB);
System.out.println(VB);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} */
System.out.println(VB); // só ira imprimir pois não mandei minha parte de servidor para envia os dados no codigo a cima.
}
//Manipula as chamadas dos eventos de localização
private LocationListener listener = new LocationListener() {
@Override
public void onLocationChanged(Location location) {
Loc_Atual = location;
atualizacao();
// rotina para atualizar de 3 em 3 mintos que estou tendo problema
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask(){
public void run() {
grava();
}
},3*60000,3*60000);
}
@Override
public void onStatusChanged(String arg0, int arg1, Bundle arg2) {}
@Override
public void onProviderEnabled(String arg0) {}
@Override
public void onProviderDisabled(String arg0) {}
};
@Override
protected void onPause() {
super.onPause();
manager.removeUpdates(listener);
}
}[/code]
Main.xml
[code]<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="30dp"
android:layout_marginTop="35dp" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="40dp"
android:text="Usuario: "
android:textAppearance="?android:attr/textAppearanceLarge"
android:textColor="#0000CD" />
<TextView
android:id="@+id/txtuser"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="40dp"
android:layout_weight="0.67"
android:textColor="#E0FFFF" />
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/lblLatitude"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="60dp"
android:layout_marginTop="20dp"
android:text="Latitude: "
android:textColor="#8DB6CD" />
<TextView
android:id="@+id/txtLatitude"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_marginTop="20dp"
android:textColor="#E0FFFF" />
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
<TextView
android:id="@+id/lblLongitude"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="60dp"
android:layout_marginTop="20dp"
android:text="Longitude: "
android:textColor="#8DB6CD" />
<TextView
android:id="@+id/txtLongitude"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:layout_marginTop="20dp"
android:textColor="#E0FFFF" />
</LinearLayout>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</LinearLayout>
[/code]