2014-09-29 3 views
0

В моей базе данных У меня есть список дат и времени в этом формате «yyyy-mm-dd hh: mm». В каждый день и время я хочу начать соответствующее уведомление. Но вместо этого уведомление начинается немедленно. Что не так?Android AlarmManager сразу начинается

private void setAlarmFromDatabase(){    
     SQLiteDatabase db = mHelper.getReadableDatabase(); 
     String sql = "SELECT _id, riserva_3 FROM riserva"; 
     Cursor c = db.rawQuery(sql, null);   
     int count = c.getCount(); 
      long[] data_ora = new long[count]; 
      for(int i=0; i<count; i++) { 
       c.moveToNext();  
       String id = c.getString(0); 
       data_ora[i] = c.getLong(1);  

      } 

     c.close(); 
    db.close(); 

    AlarmManager[] alarmManager=new AlarmManager[24]; 
     for(int ii=0;ii<data_ora.length;ii++) 
     { 
      alarmManager[ii] = (AlarmManager) getSystemService(ALARM_SERVICE);    

      Intent i = new Intent(getBaseContext(), Notifica_scadenza.class); 

      PendingIntent displayIntent=PendingIntent.getBroadcast(getBaseContext(),ii,i,0); 
      alarmManager[ii].set(AlarmManager.RTC_WAKEUP,(data_ora[ii]), displayIntent); 
     } 
     this.finish(); 
     overridePendingTransition(R.anim.right_in, R.anim.left_out); 
     } 

} BroadcastReceiver

public class Notifica_scadenza extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent arg1) { 
    // Vibrate the mobile phone 
    Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); 
    vibrator.vibrate(1000); 
    showNotification(context); 
} 
private void showNotification(Context context) { 
    PendingIntent contentIntent = PendingIntent.getActivity(context, 0, 
      new Intent(context, Inserisci_entrate_uscite.class), 0); 

    NotificationCompat.Builder mBuilder = 
      new NotificationCompat.Builder(context) 
      .setSmallIcon(R.drawable.allarm_icon) 
      .setContentTitle(context.getString(R.string.app_name)) 
      .setContentText(context.getString(R.string.titolo_scadenza)); 
    mBuilder.setContentIntent(contentIntent); 
    mBuilder.setDefaults(Notification.DEFAULT_SOUND); 
    mBuilder.setAutoCancel(true); 

    NotificationManager mNotificationManager = 
    (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    mNotificationManager.notify(1, mBuilder.build()); 

} 
} 

разрешение в Manifest

<uses-permission android:name="android.permission.VIBRATE" android:required="false"/> 
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/> 
<receiver android:name="scad.Notifica_scadenza"></receiver> 
+1

AFAIK, SQLite не будет магически конвертировать 'yyyy-mm-dd hh: mm' в дату, которую вы можете использовать с' getLong() '. – CommonsWare

+0

Также обратите внимание, что 'yyyy-mm-dd hh: mm' не является допустимым форматом. Вы имеете в виду '' yyyy-MM-dd HH: mm "' –

+0

Извините, я написал не так, они находятся в 'yyyy-MM-dd HH: mm', как я могу это исправить? – user3608814

ответ

0

Как CommonsWare упоминалось, скорее всего, проблема с преобразованием даты. Прежде чем цикл for определит также формат даты, который вы можете использовать для форматирования полученной даты из базы данных.

final SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault()); 

Теперь в цикл, попробуйте следующее:

try { 
    data_ora[i] = dateFormat.parse(cursor.getString(1)).getTime(); 
} catch (ParseException e) { 
    Log.e(TAG, "Something wrong happened while parsing the date.", e); 
} 

Вы также можете выйти данные для того, чтобы увидеть, если данные верны или нет (сразу после предыдущей строки).

Log.i("YOUR_TAG", "The id is: " + id + ", and the time: " + data_ora[i]);