2011-11-29 84 views
0

我是新的android编程,我正在研究Android应用程序,我被困在创建多个警报。 我的代码仅触发最后一次报警,并忽略以前的 日期将被存储在数据库中(SQlite的)用户指定多个警报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); 

    } 
} 

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

回答

4

幸运的是,答案很简单。您的代码是:

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

第二个参数是request_code就像是对的PendingIntent ID和因为你总是覆盖以前的PendingIntent。所以你需要做的是为你需要的每个闹钟设置一个唯一的请求代码。在你的情况下,你可以使用reminderId,这是我猜数据库行ID。并且因为这是每个闹钟的唯一ID,所以它非常合适。

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

感谢您回答我的问题。但我试着你的建议,它给了我一个错误,因为它只需要int类型和我的提醒ID类型长 – zoza

+0

,我试图改变它的类型为int,但它给我在我的项目中的任何地方的错误。 – zoza

+0

非常感谢问题解决 – zoza