Boa noite.
Estou tentando fazer meu APP android mostrar apenas uma notificação na data pré cadastrada em um banco de dados que é lida via JSON.
segue como está agora:
Splash.java
boolean alarmeAtivo = (PendingIntent.getBroadcast(this, 0, ,new Intent(“alarme”)
PendingIntent.FLAG_NO_CREATE) == null);
if(alarmeAtivo){
Log.i("Script", "Novo alarme");
Intent intent = new Intent("alarme");
PendingIntent p = PendingIntent.getBroadcast(this, 0, intent, 0);
Calendar c = Calendar.getInstance();
c.setTimeInMillis(System.currentTimeMillis());
c.add(Calendar.SECOND, 5);
AlarmManager alarme = (AlarmManager) getSystemService(ALARM_SERVICE);
alarme.setRepeating(AlarmManager.RTC_WAKEUP, c.getTimeInMillis(), 24 * 60 * 60 * 1000, p); //24 * 60 * 60 * 1000 - 1 dia
} else{
Log.i("Script", "Alarme já ativo");
}
e aqui como resgato a data e a descrição do DB.
BroadCastReceiver.java
public class BroadCastReceiver extends BroadcastReceiver {
private SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM-dd”);
private String data = “2000-01-01”;
private String descricao = “”;
private URL url;
private Context c;
@Override
public void onReceive(Context context, Intent intent) {
this.c = context;
BackgroundTask t = new BackgroundTask();
t.execute();
}
public void gerarNotificacao(Context context, Intent intent, CharSequence ticker, CharSequence titulo, CharSequence descricao){
NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
PendingIntent p = PendingIntent.getActivity(context, 0, intent, 0);
NotificationCompat.Builder builder = new NotificationCompat.Builder(context);
builder.setTicker(ticker);
builder.setContentTitle(titulo);
builder.setContentText(descricao);
builder.setSmallIcon(R.drawable.ic_launcher);
builder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.drawable.ic_launcher));
builder.setContentIntent(p);
Notification n = builder.build();
n.vibrate = new long[]{150, 300, 150, 600};
n.flags = Notification.FLAG_AUTO_CANCEL;
nm.notify(R.drawable.ic_launcher, n);
try{
Uri som = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
Ringtone toque = RingtoneManager.getRingtone(context, som);
toque.play();
}
catch(Exception e){}
}
public class BackgroundTask extends AsyncTask<Void, Void, Mensagens> {
@Override
protected Mensagens doInBackground(Void... voids) {
Mensagens m = new Mensagens();
try {
url = new URL("http://localhost:8080/sicom/json_alarme");
String JSON_STRING;
HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
InputStream inputStream = httpURLConnection.getInputStream();
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));
StringBuilder stringBuilder = new StringBuilder();
while ((JSON_STRING = bufferedReader.readLine()) != null){
stringBuilder.append(JSON_STRING + "\n");
}
JSONArray jsonArray = new JSONArray(stringBuilder.toString());
for (int i = 0; i < jsonArray.length(); i++){
JSONObject jsonObject = jsonArray.getJSONObject(i);
m.setId_mensagem(jsonObject.getInt("id_alarme"));
m.setData(jsonObject.getString("dt_alarme"));
m.setDescricao(jsonObject.getString("descricao"));
}
bufferedReader.close();
inputStream.close();
httpURLConnection.disconnect();
} catch (IOException e) {
e.printStackTrace();
} catch (JSONException e) {
e.printStackTrace();
}
return m;
}
@Override
protected void onPostExecute(Mensagens m) {
if(!m.equals(null)){
System.out.println(sdf.format(new Date()));
System.out.println(m.getData());
if (sdf.format(new Date()).equalsIgnoreCase(m.getData())) {
//if (sdf.format(new Date()).equalsIgnoreCase(sdf.format(new Date()))) {
Log.i("Script", "-> Alarme");
gerarNotificacao(c, new Intent(c, Splash.class), "SICOM",
"Contracheque PM Santiago!", m.getDescricao());
} else {
Log.i("Script", "-> Nada a mostrar.");
}
}
}
}
}