>

Fórum

Fórum da RL System, voltado para analistas, programadores etc. Tudo sobre linguagem de programação e desenvolvimento Full Stack: Banco de Dados, Android, C#, Java, .NET, PHP, Node, Javascript, TypeScript, Front, HTML e muito mais.



Agendar Serviço para executar de tempos em tempos


Estou com dúvidas com relação a criar um Alarme para gerenciar a execução de um service de tempos em tempos. Creio que estou me perdendo na questão de contextos :

Tenho uma Classe Conectividade que checa o status da Conexao de Internet :

public class Conectividade {

private Context ctx;

public Conectividade(Context _ctx){
this.ctx = _ctx;
}

public int checaConectividade(){

ConnectivityManager conexao;
conexao = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);


if(conexao.getNetworkInfo(0).isConnected()){ // 0 = 3G,2G
Log.d("TCC","Internet Conectada via 3g/2g");
return 0;

}
else if(conexao.getNetworkInfo(1).isConnected()){ // 1 = WiFi
Log.d("TCC","Internet Conectada via Wifi");
return 1;
}
else{
Log.d("TCC","Sem conexão de Internet");
return -1;
}
}
}

Tenho uma classe Monitor que tem a finalidade de criar o agendamento da tarefa para checar a conexão de internet de tempos em tempos :

public class Monitor {

private Context _ctx;

public Monitor(Context ctx){
_ctx = ctx;
}

public void MonitorConectividade(){
PendingIntent pi;
Calendar tempo;
AlarmManager alarmeTarefa;

Log.d("TCC", "Entrou no MonitorTarefa");
Intent it = new Intent("INICIARMONITOR");
pi = PendingIntent.getService(_ctx, 0, it,0);
tempo = Calendar.getInstance();
tempo.setTimeInMillis(System.currentTimeMillis());
tempo.add(Calendar.SECOND,10);
alarmeTarefa = (AlarmManager) _ctx.getSystemService(Context.ALARM_SERVICE);
long time = tempo.getTimeInMillis();
alarmeTarefa.setRepeating(AlarmManager.RTC_WAKEUP, time, 5000, pi);
}
}

O serviço em si :

public class MonitorTarefaService extends Service implements Runnable {

Conectividade conn =null;

public void onCreate(){
conn = new Conectividade(MonitorTarefaService.this);
Log.d("TCC","Serviço criado");
new Thread(MonitorTarefaService.this).start();
}

@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}


@Override
public void run() {
// TODO Auto-generated method stub
Log.d("TCC","Servico executado");
Log.d("TCC",Integer.toString(conn.checaConectividade()));

}
}

Na Activity eu criaria uma instância da classe Monitor invocando o metodo MonitorConectividade.

Monitor mon = new Monitor(MainActivity.this);
mon.MonitorConectividade();


Quando rodo a aplicação, ela executa o serviço uma vez e não executa mais. Poderia me dar um luz por gentileza ?

Obrigado.



1 Resposta


Olá

O serviço para de rodar?

Outra coisa, ao invês de criar um alarme, faça o teu serviço rodar um procedimento de X em X tempo.

Lá na service faz isso, dentro do onCreate. Ai não precisa do Alarm.


Timer mTimer = new Timer();

mTimer.schedule(new TimerTask() {
@Override
public void run() {
// Ai verifica a conexão.
}

}, 0, 7000);
} catch (Exception ex) {

}


Veja ali os 7000 => 7 segundos.

Dentro do Create do Service. Ai ele cria um timer que faz isso dentro dele mesmo.