Android, как отменить будильник? alarmManager.cancel не работает
У меня есть приложение, в котором вы можете создать 5 будильников, где они будут отображаться в ListView, и предположить, что когда элемент listView воспроизводит будильник, но должен удалить элемент из списка, но будильник удаляется, чтобы достичь запланированного времени всегда звуки. Я просмотрел много уроков и руководств о том, как убрать сигналы тревоги, но ни один из них не помог мне. Чтобы удалить то, что я делаю, нужно сохранить идентификатор каждой тревоги в базе данных sqlite, и когда я даю eliminiar тревоги, я делаю, я передаю идентификатор тревоги, который хочу устранить, и передаю его PendingIntent.getBroadcast, чтобы удалить тревогу. хочу но не бывает. Кто-то может проверить мой код и сказать мне, если какая-либо ошибка падает так, чтобы тревога не была устранена. Благодарю вас
Этот метод я использую для создания сигналов
public void agregarAlarma(Calendar targetCal){
final int _id = ((int)System.currentTimeMillis()/1000);
Random generator = new Random();
DbHelper helper = new DbHelper(this);
SQLiteDatabase bd = helper.getWritableDatabase();
int id_nuevo = (_id + generator.nextInt());
if(alarma.getSelectedItem().toString().equals("Desayuno")){
comida = alarma.getSelectedItem().toString() + " " + targetCal.getTime().toString();
descripcion = "del desayuno";
}else if(alarma.getSelectedItem().toString().equals("Primera Merienda")){
comida = alarma.getSelectedItem().toString() + " " + targetCal.getTime().toString();
descripcion = "de la primera merienda";
}else if(alarma.getSelectedItem().toString().equals("Almuerzo")){
comida = alarma.getSelectedItem().toString() + " " + targetCal.getTime().toString();
descripcion = "del almuerzo";
}else if(alarma.getSelectedItem().toString().equals("Segunda Merienda")){
comida = alarma.getSelectedItem().toString() + " " + targetCal.getTime().toString();
descripcion = "de la segunda merienda";
} else if(alarma.getSelectedItem().toString().equals("Cena")){
comida = alarma.getSelectedItem().toString() + " " + targetCal.getTime().toString();
descripcion = "de la cena";
}
Intent intent;
PendingIntent pendingIntent;
AlarmManager alarmManager;
if(tablaVacia()>= 5){
Toast.makeText(this,"Esta lista solo permite 5 alarmas, elimine alguna para crear otra nueva",Toast.LENGTH_SHORT).show();
}else{
intent = new Intent(Recordatorios2.this, AlarmReceiver.class);
intent.putExtra("Comida",comida);
pendingIntent = PendingIntent.getBroadcast(Recordatorios2.this, id_nuevo ,intent, PendingIntent.FLAG_ONE_SHOT);
alarmManager = (AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, targetCal.getTimeInMillis(), pendingIntent);
descripcionTotal = "Alarma " + descripcion + " creada "+ targetCal.getTime().toString();
Toast.makeText(this,descripcionTotal,Toast.LENGTH_SHORT).show();
ContentValues valores = new ContentValues();
valores.put("Descripcion",comida);
valores.put("Identificador",id_nuevo);
bd.insert("Alarmas",null,valores);
llenarListaAlarmas1();
}
}
Это заполнило listView
public void llenarListaAlarmas1(){
listaAlarmas = (ListView)findViewById(R.id.listAlarma);
lista.clear();
DbHelper helper = new DbHelper(this);
SQLiteDatabase bd = helper.getWritableDatabase();
Cursor c = bd.rawQuery(CONSULTA_ALARMAS,null);
if(c.moveToFirst()){
do{
alarmaDatos = new AlarmaDatos(c.getString(0),null);
lista.add(alarmaDatos);
}while (c.moveToNext());
}
final ArrayAdapter<AlarmaDatos> adapter1 = new ArrayAdapter<AlarmaDatos>(getApplicationContext(),android.R.layout.simple_list_item_1,lista);
adapter1.notifyDataSetChanged();
listaAlarmas.setAdapter(adapter1);
adapter1.notifyDataSetChanged();
listaAlarmas.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView adapterView, View view, int position, long id) {
switch (position){
case 0:
seleccion = adapter1.getItem(position).toString();
eliminarAlarma();
adapter1.notifyDataSetChanged();
lista.remove(position);
break;
case 1:
seleccion = adapter1.getItem(position).toString();
eliminarAlarma();
adapter1.notifyDataSetChanged();
lista.remove(position);
break;
case 2:
seleccion = adapter1.getItem(position).toString();
eliminarAlarma();
adapter1.notifyDataSetChanged();
lista.remove(position);
break;
case 3:
seleccion = adapter1.getItem(position).toString();
eliminarAlarma();
adapter1.notifyDataSetChanged();
lista.remove(position);
break;
case 4:
seleccion = adapter1.getItem(position).toString();
eliminarAlarma();
adapter1.notifyDataSetChanged();
lista.remove(position);
break;
}
}
});
}
И ЭТО ОДИН, КОТОРЫЙ ИСПОЛЬЗУЕТСЯ ДЛЯ УДАЛЕНИЯ ТРЕВОГ
public void eliminarAlarma(){
DbHelper helper = new DbHelper(getApplicationContext());
SQLiteDatabase bd = helper.getWritableDatabase();
int identificador =0;
String CONSULTA_ID = "SELECT Identificador FROM Alarmas WHERE Alarmas.Descripcion = '" + seleccion + "';" ;
Cursor cursor = bd.rawQuery(CONSULTA_ID,null);
if(cursor.moveToFirst()){
do{
alarmaDatos = new AlarmaDatos(cursor.getString(0),null);
identificador = Integer.parseInt(alarmaDatos.toString());
}while (cursor.moveToNext());
}
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), identificador ,intent,0);
AlarmManager alarmManager = (AlarmManager)getSystemService(getApplicationContext().ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
pendingIntent.cancel();
borrar(identificador);
Toast.makeText(getApplicationContext(),"Alarma eliminada",Toast.LENGTH_SHORT).show();
}
Может кто-нибудь, пожалуйста, помогите мне с этим, потому что правда не в том, что он устраняет тревогу, если все выглядит хорошо.
ТКС