我正在开发一个提醒应用程序,其中我使用sqlite将所有提醒 相关数据存储在数据库中,一切工作正常。使用AlarmManager取消闹钟
问题:
当我从数据库中删除,我还试图把 报警断行,但它不工作,我使用recyclerview。
请帮我找出我的代码中有什么问题。
这里是我的代码:
DataAdapter.java
dataAdapterViewHolder.deleteButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int deleteRowId = context.getContentResolver().delete(RoutineContract.RoutinesEntry.CONTENT_URI,
rowSelection, rowSelectionArgs);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, AlarmReceiver.class);
PendingIntent alertIntent = PendingIntent.getBroadcast(context, rowId, intent, PendingIntent.FLAG_NO_CREATE);
if(alertIntent != null) {
alarmManager.cancel(alertIntent);
alertIntent.cancel();
Log.e("row id", ""+rowId);
}
}
});
AddReminderActivity.java
Uri insertUri = getContentResolver().insert(RoutineContract.RoutinesEntry.CONTENT_URI, contentValues);
int rowId = Integer.parseInt(insertUri.getLastPathSegment());
Intent intent = new Intent(this, AlarmReceiver.class);
intent.setData(insertUri);
intent.putExtra("name", name);
intent.putExtra("repeatType", repeatType);
PendingIntent alertIntent = PendingIntent.getBroadcast(this, rowId, intent, PendingIntent.FLAG_ONE_SHOT);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, dateTime.getTimeInMillis(),
pendingIntent);
PS:我已经搜查计算器和发现解决问题的办法但现在没有人为我工作。
我也尝试过使用FLAG_UPDATE_CURRENT和FLAG_ONE_SHOT,但那对我来说不起作用 –
请参阅我编辑的答案,并尝试添加setData(yourUri)时也取消报警 –
感谢工作,它在文档中提到,取消pendingIntent应该与创建时使用的匹配,我忘了这一点。 –