多个警报SQLite

zoz*_*oza 0 sqlite android alarmmanager

我是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);
    }
}
Run Code Online (Sandbox Code Playgroud)

这是接收器类

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);

    }
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮我修改我的代码来触发存储在数据库中的用户指定的多个警报.

Dom*_*rtl 5

幸运的是,答案非常简单.你的代码是:

PendingIntent pi = PendingIntent.getBroadcast(mContext, 0, i, PendingIntent.FLAG_ONE_SHOT);
Run Code Online (Sandbox Code Playgroud)

第二个参数是request_code就像是PendingIntent的id,因为你总是覆盖之前的PendingIntent.因此,您需要为您需要的每个警报设置唯一的请求代码.在您的情况下,您可以使用reminderId,也就是说,我猜数据库行ID.并且因为这是每个报警的唯一ID,所以它非常适合.

PendingIntent pi = PendingIntent.getBroadcast(mContext, reminderId, i, PendingIntent.FLAG_ONE_SHOT);
Run Code Online (Sandbox Code Playgroud)