使用警报管理器事件保存变量
Save variable with alarm manager event
我正在为 Android 构建一个学习计划应用程序,我设置了 AlarmManager
并在时间结束时触发通知,效果很好。
设置闹钟时,闹钟的详细信息被保存到SQLite
数据库中,当闹钟响起时,我需要调出警报信息,是否有某种形式的变量可以保存到数据库中link 到特定警报,以便我可以在 SQLite query
中使用它来找到正确的条目。
更新以下代码:
Long nIdLong = System.currentTimeMillis();
String nId = nIdLong.toString();
Intent alarmIntent = new Intent(context, AlarmReceiver.class);
alarmIntent.putExtra("nID", nId);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent , 0);
AlarmManager alarmManager = (AlarmManager)getActivity().getSystemService(getActivity().ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
报警接收器:
public void onReceive(Context context, Intent intent)
{
long dbId = intent.getLongExtra("nID", 0);
String notificationId = Long.toString(dbId);
Log.i("App", "called receiver method");
try{
Toast.makeText(context, notificationId, Toast.LENGTH_LONG).show();
}catch(Exception e){
e.printStackTrace();
}
}
提前致谢
在设置警报时,首先检索将在通过
将警报详细信息插入 SQLite 时创建的 ID
long uniqueId = db.insert(your query);
并将其放入 AlarmManager 的 PendindIntent 意图中
Intent alarmIntent = new Intent(this, AlarmEventReceiver.class);
alarmIntent.putExtra("dbId", uniqueId);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent , 0);
在AlarmEventReceiver 的onReceive() 中,您可以获取id 并从DB 中检索数据。
@Override
public void onReceive(Context context, Intent intent) {
long dbId = intent.getLongExtra("dbId", 0);
}
您正在通过 Intent 发送一个 String,它需要一个 Long,这段代码应该可以工作。
Long nIdLong = System.currentTimeMillis();
String nId = nIdLong.toString();
Intent alarmIntent = new Intent(context, AlarmReceiver.class);
alarmIntent.putExtra("nID", nIdLong);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent , 0);
AlarmManager alarmManager = (AlarmManager)getActivity().getSystemService(getActivity().ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
我正在为 Android 构建一个学习计划应用程序,我设置了 AlarmManager
并在时间结束时触发通知,效果很好。
设置闹钟时,闹钟的详细信息被保存到SQLite
数据库中,当闹钟响起时,我需要调出警报信息,是否有某种形式的变量可以保存到数据库中link 到特定警报,以便我可以在 SQLite query
中使用它来找到正确的条目。
更新以下代码:
Long nIdLong = System.currentTimeMillis();
String nId = nIdLong.toString();
Intent alarmIntent = new Intent(context, AlarmReceiver.class);
alarmIntent.putExtra("nID", nId);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent , 0);
AlarmManager alarmManager = (AlarmManager)getActivity().getSystemService(getActivity().ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);
报警接收器:
public void onReceive(Context context, Intent intent)
{
long dbId = intent.getLongExtra("nID", 0);
String notificationId = Long.toString(dbId);
Log.i("App", "called receiver method");
try{
Toast.makeText(context, notificationId, Toast.LENGTH_LONG).show();
}catch(Exception e){
e.printStackTrace();
}
}
提前致谢
在设置警报时,首先检索将在通过
将警报详细信息插入 SQLite 时创建的 IDlong uniqueId = db.insert(your query);
并将其放入 AlarmManager 的 PendindIntent 意图中
Intent alarmIntent = new Intent(this, AlarmEventReceiver.class);
alarmIntent.putExtra("dbId", uniqueId);
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, alarmIntent , 0);
在AlarmEventReceiver 的onReceive() 中,您可以获取id 并从DB 中检索数据。
@Override
public void onReceive(Context context, Intent intent) {
long dbId = intent.getLongExtra("dbId", 0);
}
您正在通过 Intent 发送一个 String,它需要一个 Long,这段代码应该可以工作。
Long nIdLong = System.currentTimeMillis();
String nId = nIdLong.toString();
Intent alarmIntent = new Intent(context, AlarmReceiver.class);
alarmIntent.putExtra("nID", nIdLong);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent , 0);
AlarmManager alarmManager = (AlarmManager)getActivity().getSystemService(getActivity().ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC, calendar.getTimeInMillis(), pendingIntent);