如何通过Alarm Manager设置多个通知?

时间:2016-03-07 22:50:17

标签: android database sqlite notifications alarmmanager

我有一个存储在db中的String时间值。我可以使用下面的代码访问这些代码,这将返回并记录所有时间值。

我需要向用户发送有关这些单独时间值的通知,但我没有成功。它似乎只向我发送了我输入的最后一个条目的通知,为什么会这样?

广播接收器具有onRecieve方法

return false;

方法可以在db中查找并循环遍历值。

@Override
public void onReceive(Context context, Intent intent)
{

    helper = new TaskDBHelper(context);
    SQLiteDatabase sqlDB = helper.getReadableDatabase();
    Cursor cursor = sqlDB.query(TaskContract.TABLE,
            new String[]{TaskContract.Columns._ID, TaskContract.Columns.TASK, TaskContract.Columns.DATE},
            null, null, null, null, null);
    cursor.moveToFirst();

    while (!cursor.isAfterLast()) {
        Name = cursor.getString(1);
        NotificationCompat.Builder builder =
                new NotificationCompat.Builder(context)
                        .setSmallIcon(R.drawable.ic_cast_light)
                        .setContentTitle("Please Take " + Name)
                        .setContentInfo("Time")
                        .setContentText("Enjoy" )
                        .setDefaults(Notification.DEFAULT_SOUND)
                        .setAutoCancel(true)
                        .setVibrate(new long[]{500, 500, 500, 500}) //set virbrate & color of led
                        .setLights(Color.BLUE, 3000, 3000);

        NotificationManager nManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
        nManager.notify(getID(), builder.build());
        cursor.moveToNext();
    }

}

的getId()

   private void setUpNot(){
    helper = new TaskDBHelper(Meds2.this);
    SQLiteDatabase sqlDB = helper.getReadableDatabase();

    Cursor cursor = sqlDB.query(TaskContract.TABLE,
            new String[]{TaskContract.Columns._ID, TaskContract.Columns.TASK, TaskContract.Columns.DATE},
            null, null, null, null, null);

    cursor.moveToFirst();

    while (!cursor.isAfterLast()) { // Loop until all vales have been seen

        String time = cursor.getString(2);
        String[] parts = time.split(":"); //Split  String Value stored in db
        String part1 = parts[0]; // hour
        String part2 = parts[1]; // minute
        int hr = Integer.parseInt(part1);
        int min = Integer.parseInt(part2);

        final int _id=(int)System.currentTimeMillis();

        Intent alarmIntent = new Intent(Meds2.this, AlarmReceiver.class); //set up alarm
        pendingIntent = PendingIntent.getBroadcast(Meds2.this, _id, alarmIntent, 0);

        AlarmManager manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
        Calendar calendar = Calendar.getInstance();
        calendar.setTimeInMillis(System.currentTimeMillis());
        calendar.set(Calendar.HOUR_OF_DAY, hr);
        calendar.set(Calendar.MINUTE, min); //set cal time based of db value

                    /* Repeating on every 24 hours interval */
        manager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
                AlarmManager.INTERVAL_DAY, pendingIntent); // run every date.time() in millisec

        Log.e(TAG, "DATE VALUE TIME IS " + part1 +"--" +part2); //log part one and two to make sure time is right

        cursor.moveToNext();
    }
}

1 个答案:

答案 0 :(得分:1)

问题在于您的getID()方法。

您的getID()方法将始终返回1,因此会生成通知ID' 1'每次,这意味着您始终更新通知而不是创建新通知。这就是为什么即使您创建了多个通知,您也只能获得一个通知。

你必须像这样修改你的getID()方法:

static AtomicInteger c = new AtomicInteger(0);

public static int getID() {
   return  c.incrementAndGet();
}

通过这样做,您每次都会获得不同的ID,因此会收到不同的通知。