Oi pessoal, esse é meu primeiro topico, seguinte estou com um problema na thread, tenho um aplicativo que fica de 1 em 1 minuto verificando se deu o horário de aula da pessoa, caso positivo eu envio uma notificação com o nome da materia e da sala. Está funcionando, porém se ativo agora meu aplicativo(12:00 meio dia) e deixo rodando minimizado quando for 19:25 que seria a condição para enviar a notificação, ele simplesmente não envia e não dá nenhum erro e continua rodando o aplicativo. Não consigo verificar o erro no debug, pois quando debugo ele funciona. Como nunca fiz uma thread acredito que o problema esteja nela. Quem puder me dar uma luz eu agradeço. Segue abaixo o código na classe que tem a thread. O codigo está um pouco extenso pq faço a mesma coisa para cada if, estava tudo em um metodo, mas tirei pensando que o problema era ele.
[code]import java.util.ArrayList;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Handler;
import android.os.Vibrator;
import android.view.GestureDetector;
import android.view.GestureDetector.OnGestureListener;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class MenuPrincipal extends Activity implements OnGestureListener {
private Button buttonMenuVerHorario;
private Button buttonMenuCriarHorarios;
private Button buttonMenuCadastrarMaterias;
private Button buttonMapa;
private GestureDetector detector = null;
private int diaAtual;
private final Handler handler =new Handler();
//public static ControleVibrar iniciaVibrar;
private static Thread thread;
private static Thread thread2;
private static VerificaHora conexao;
private NotificationManager mNotificationManager;
private int SIMPLE_NOTFICATION_ID;
private Notification notifyDetails;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.menuprincipal);
fillComponents();
setCallBacks();
mNotificationManager = (NotificationManager) MenuPrincipal.this.getSystemService(MenuPrincipal.this.NOTIFICATION_SERVICE);
notifyDetails = new Notification(R.drawable.japraaulalogo2, MenuPrincipal.this.getResources().getString(R.string.app_name), System.currentTimeMillis());
mNotificationManager.cancel(SIMPLE_NOTFICATION_ID);
//mNotificationManager.cancel(SIMPLE_NOTFICATION_ID);
detector = new GestureDetector(this);
}
public void fillComponents() {
buttonMenuVerHorario = (Button) findViewById(R.id.buttonMenuVer);
buttonMenuCriarHorarios = (Button) findViewById(R.id.buttonMenuCriar);
buttonMenuCadastrarMaterias = (Button) findViewById(R.id.buttonMenuCadastrar);
buttonMapa = (Button) findViewById(R.id.buttonMapa);
}
public void setCallBacks() {
// handler = new Handler();
//iniciaVibrar = new ControleVibrar(MenuPrincipal.this, handler);
//thread2 = new Thread(iniciaVibrar);
conexao = new VerificaHora(MenuPrincipal.this, handler/*,iniciaVibrar*/);
conexao.setControle(true);
thread = new Thread(conexao);
thread.start();
buttonMenuVerHorario.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
acaoMenuVerhorario();
}
});
buttonMenuCriarHorarios.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
acaoMenuCriarhorario();
}
});
buttonMenuCadastrarMaterias.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
acaoMenucadastrarMateria();
}
});
buttonMapa.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
acaoMapa();
}
});
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
switch (keyCode) {
case KeyEvent.KEYCODE_MENU:
return false;
case KeyEvent.KEYCODE_SEARCH:
return false;
case KeyEvent.KEYCODE_BACK:
AlertDialog.Builder aviso = new AlertDialog.Builder(this);
aviso.setTitle("Aviso"); // Titulo do AlertDialog;
aviso.setMessage("Se você fechar o aplicativo, a função de alerta de aula será desligada. Você realmente deseja sair?"); // Mensagem do AlertDialog;
aviso.setPositiveButton("SIM", new DialogInterface.OnClickListener() { // Botão de Positivo do Alert;
public void onClick(DialogInterface arg0, int arg1) {
conexao.setControle(false);
//iniciaVibrar.setVibraCel(false);
MenuPrincipal.this.finish();
}
});
aviso.setNegativeButton("NÃO", new DialogInterface.OnClickListener() { // Botão de Negativo do Alert;
public void onClick(DialogInterface arg0, int arg1) {
}
});
aviso.show();
default:
break;
}
return super.onKeyDown(keyCode, event);
}
@Override
protected void onStop() {
// TODO Auto-generated method stub
super.onStop();
//iniciaVibrar.setVibraCel(false);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
android.os.Process.killProcess(android.os.Process.myPid());
}
private void acaoMenuVerhorario() {
Intent it;
switch (new Date().getDay()) {
case 0:
it = new Intent(MenuPrincipal.this, HorariosCadastradosSeg.class);
startActivity(it);
//this.finish();
break;
case 1:
it = new Intent(MenuPrincipal.this, HorariosCadastradosSeg.class);
startActivity(it);
//this.finish();
break;
case 2:
it = new Intent(MenuPrincipal.this, HorariosCadastradosTer.class);
startActivity(it);
//this.finish();
break;
case 3:
it = new Intent(MenuPrincipal.this, HorariosCadastradosQua.class);
startActivity(it);
// this.finish();
break;
case 4:
it = new Intent(MenuPrincipal.this, HorariosCadastradosQui.class);
startActivity(it);
// this.finish();
break;
case 5:
it = new Intent(MenuPrincipal.this, HorariosCadastradosSex.class);
startActivity(it);
// this.finish();
break;
case 6:
it = new Intent(MenuPrincipal.this, HorariosCadastradosSab.class);
startActivity(it);
// this.finish();
break;
default:
break;
}
}
private void acaoMenuCriarhorario() {
Intent it = new Intent(MenuPrincipal.this, MenuHorarios.class);
startActivity(it);
//this.finish();
}
private void acaoMenucadastrarMateria() {
Intent it = new Intent(MenuPrincipal.this, MenuMaterias.class);
startActivity(it);
//this.finish();
}
private void acaoMapa() {
Intent it = new Intent(MenuPrincipal.this, SiteActivity.class);
startActivity(it);
//this.finish();
}
public String verificaDia(){
String dia="";
return dia;
}
public boolean onDown(MotionEvent arg0) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (this.detector.onTouchEvent(event)) {
return true;
}
return super.onTouchEvent(event);
}
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX,
float velocityY) {
// TODO Auto-generated method stub
if (Math.abs(e1.getY() - e2.getY()) > 250) {
return false;
}
// Movimento da direita para esquerda
if (e1.getX() - e2.getX() > 100 && Math.abs(velocityX) > 200) {
this.buttonMenuCadastrarMaterias.performClick();
} else if (e2.getX() - e1.getX() > 100 && Math.abs(velocityX) > 200) {
Toast.makeText(MenuPrincipal.this,
"Não Existe Menu a Esquerda do Menu Principal.",
Toast.LENGTH_LONG).show();
}
return true;
}
public void onLongPress(MotionEvent e) {
// TODO Auto-generated method stub
}
public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX,
float distanceY) {
// TODO Auto-generated method stub
return false;
}
public void onShowPress(MotionEvent e) {
// TODO Auto-generated method stub
}
public boolean onSingleTapUp(MotionEvent e) {
// TODO Auto-generated method stub
return false;
}
}
class VerificaHora extends Activity implements Runnable {
private Context context2;
private final Handler handler2;
//private ControleVibrar iniciaVibrar;
private static Thread thread2;
public Dialog dialog2 ;
String sala, materia;
GregorianCalendar gc;
String diaSemanaTexto;
int diaSemana;
int hora;
int minuto;
SQLiteDatabase leBd;
Cursor c ;
int resu ;
SQLiteDatabase leBd2;
List<String> list ;
String[] lista ;
Cursor cd;
TextView text;
DialogInterface.OnDismissListener ff;
Button _ok;
boolean controle;
NotificationManager nm;
Notification notificacao;
Intent intentMensagem;
PendingIntent p;
public void setControle(boolean controle){
this.controle = controle;
}
public VerificaHora(Context context, Handler handler /*,ControleVibrar iniciaVibrar*/) {
// TODO Auto-generated constructor stub
this.context2 = context;
this.handler2 = handler;
//this.iniciaVibrar = iniciaVibrar;
}
@Override
public void run() {
while (controle) {
try {
Thread.sleep(60000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sala="";
materia="";
gc = new GregorianCalendar();
diaSemanaTexto = "";
diaSemana = gc.get(GregorianCalendar.DAY_OF_WEEK);
if (diaSemana == 1) {
diaSemanaTexto = "Domingo";
} else if (diaSemana == 2) {
diaSemanaTexto = "Segunda-Feira";
} else if (diaSemana == 3) {
diaSemanaTexto = "Terça-Feira";
} else if (diaSemana == 4) {
diaSemanaTexto = "Quarta-Feira";
} else if (diaSemana == 5) {
diaSemanaTexto = "Quinta-Feira";
} else if (diaSemana == 6) {
diaSemanaTexto = "Sexta-Feira";
} else if (diaSemana == 7) {
diaSemanaTexto = "Sábado";
}
hora = gc.getTime().getHours();
minuto = gc.getTime().getMinutes();
if (diaSemanaTexto.equals("Segunda-Feira") && hora == 19 && minuto == 25) {
leBd = null;
leBd = context2.openOrCreateDatabase("bancoHorario.db",
SQLiteDatabase.CREATE_IF_NECESSARY, null);
c = leBd.rawQuery("SELECT COUNT (id) resul FROM AULAS",
null);
c.moveToFirst();
resu = c.getInt(0);
leBd.close();
leBd2 = null;
leBd2 = context2.openOrCreateDatabase("bancoHorario.db",
SQLiteDatabase.CREATE_IF_NECESSARY, null);
list = null;
lista = null;
cd = leBd2.rawQuery(
"SELECT * FROM AULAS WHERE cod_dia = 'Segunda-Feira' AND horario = '19:30'",
null);
while (!cd.isAfterLast()) {
if (cd.getPosition() == -1) {
list = new ArrayList<String>();
cd.moveToFirst();
}
sala= cd.getString(1) ;
materia= cd.getString(4);
cd.moveToNext();
}
cd.close();
leBd2.close();
if(sala.equals("") && materia.equals("")){
}
else{
final String mensagemBarraStatus = "Já Pra Aula!";
final String titulo = "Já Pra Aula!";
//Classe que voce Gostaria de Chamar Assim que clickado na notificacao.
//Voce Pode colocar outra acitivity para outra tela aqui se desejar.
final Class<?> activity = TelaNotificacao.class;
// Servico de Notificacao
nm = (NotificationManager) context2.getSystemService(context2.NOTIFICATION_SERVICE);
//Escolhendo o Icone da Notificacao, Mensagem da Barra de Status e o Tempo que sera executado o horario.
notificacao = new Notification(R.drawable.japraaula_logo, mensagemBarraStatus, System.currentTimeMillis());
intentMensagem = new Intent(context2, activity);
p = PendingIntent.getActivity(context2, 0, intentMensagem, 0);
// Reunindo todas as informacoes e Montando a mensagem e a notificacao
notificacao.setLatestEventInfo(context2, titulo, sala +" "+ materia, p);
// espera 100ms e vibra por 250ms.
notificacao.vibrate = new long[] { 100, 250, 100, 500 };
notificacao.defaults |= Notification.DEFAULT_LIGHTS;
notificacao.defaults |= Notification.DEFAULT_SOUND;
notificacao.flags |= Notification.FLAG_AUTO_CANCEL;
nm.notify(R.string.app_name, notificacao);
//setText(sala,materia);
}
}
// ... else if com o resto dos dias da semana fazendo a mesma coisa...
}
}
}[/code]