множественные тревоги SQLite - PullRequest
0 голосов
/ 30 ноября 2011

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

это мой менеджер класса напоминаний

public class ReminderManager {

    private Context mContext; 
    private AlarmManager mAlarmManager;

    public Appointments_ReminderManager(Context context) {
        mContext = context; 
        mAlarmManager = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
    }

    public void setReminder(Long reminderId, Calendar when) {

        Intent i = new Intent(mContext, Appointments_OnAlarmReceiver.class);
        i.putExtra(RemindersDbAdapter.KEY_ROWID_APPOIN, (long)reminderId); 

        PendingIntent pi = PendingIntent.getBroadcast(mContext, 0, i, PendingIntent.FLAG_ONE_SHOT); 

        mAlarmManager.set(AlarmManager.RTC_WAKEUP, when.getTimeInMillis(), pi);
    }
}

и это класс приемника

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ComponentInfo;
import android.util.Log;

public class OnAlarmReceiver extends BroadcastReceiver {

    private static final String TAG = ComponentInfo.class.getCanonicalName(); 


    @Override   
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "Received wake up from alarm manager.");

        long rowid = intent.getExtras().getLong(RemindersDbAdapter.KEY_ROWID_APPOIN);

        WakeReminderIntentService.acquireStaticLock(context);

        Intent i = new Intent(context, ReminderService.class); 
        i.putExtra(RemindersDbAdapter.KEY_ROWID_APPOIN, rowid);  
        context.startService(i);

    }
}

Может кто-нибудь, пожалуйста, помогите мне изменить мой код для запуска нескольких сигналов тревоги, указанных пользователем, который хранится в базе данных.

1 Ответ

5 голосов
/ 30 ноября 2011

К счастью, ответ довольно прост. Ваш код:

PendingIntent pi = PendingIntent.getBroadcast(mContext, 0, i, PendingIntent.FLAG_ONE_SHOT);

Второй параметр request_code похож на идентификатор для PendingIntent, и поскольку вы всегда переопределяете предыдущий PendingIntent. Так что вам нужно установить уникальный код запроса для каждого нужного вам сигнала тревоги. В вашем случае вы можете использовать функцию напоминания, которая, я думаю, идентификатор строки БД. И потому что это уникальный идентификатор для каждого будильника, он идеально подходит.

PendingIntent pi = PendingIntent.getBroadcast(mContext, reminderId, i, PendingIntent.FLAG_ONE_SHOT);
...