android 闹钟取消,Android,如何取消闹钟? alarmManager.cancel无效
我有一个应用程序,您可以在其中创建5个警报,其中创建的内容显示在ListView中,并假设当listView的元素播放了警报但应该从列表视图中删除该项目但警报被删除以达到预定的时间总是声音.
我已经查看了很多关于如何删除警报的教程和指南,但没有人帮助我.
要删除我所做的是将每个警报的ID保存在sqlite数据库中,当我发出警报时,我做的是我带来要消除的警报的id并将其提供给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 adapter1 = new ArrayAdapter(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();
}
有人可以借此给我一个帮助,因为事实不是因为如果一切看起来都很好就会消除警报.
TKS
解决方法:
无需调用pendingIntent.cancel();,因此请取出该行.
此外,PendingIntent的构造应与计划AlarmManager时完全相同.
在文档中,如果符合以下条件,则认为两个Intent相等:
their action, data, type, class, and categories are the same. This does not compare any extra data included in the intents.
所以它会是这样的:
Intent intent = new Intent(getBaseContext(), AlarmReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), identificador , intent, PendingIntent.FLAG_NO_CREATE);
AlarmManager alarmManager = (AlarmManager)getSystemService(getApplicationContext().ALARM_SERVICE);
alarmManager.cancel(pendingIntent);
标签:android,android-listview,alarmmanager,alarm,android-alarms
来源: https://codeday.me/bug/20190528/1171334.html
android 闹钟取消,Android,如何取消闹钟? alarmManager.cancel无效相关推荐
- android 闹钟服务,android开发笔记之 AlarmManager(闹钟服务)
手机闹钟服务AlarmManager AlarmManager通常用来开发手机闹钟,并且它是一个全局定时器,可在指定时间或指定周期启动其他组件(包括Activity,Service,Broadcast ...
- android 定时闹钟逻辑,Android 定时执行任务 AlarmManager的使用(可用于闹钟开发)...
Android 定时执行任务 AlarmManager的使用(可用于闹钟开发) 2011年7月13日加注:所有的定时任务在手机重启后会消失,如果需要重启后继续用,可以加个开机自启,然后重新设置. Al ...
- android 接收闹钟广播,android 设置闹钟及通知示例
简单说一下这次demo内容,首先做一个设置一次性闹钟,先得到alarmManager,打开一个时间对话框,在里面设置闹钟的时间,时间一到发送广播,然后广播接受者接到跳转到新的activity播放音乐. ...
- Android闹钟动画,Android实现闹钟小程序
最近写了个闹钟的程序,看到SharedPreferences在一个程序中可以共享数据,SharedPreferences是一个轻量级的键值存储机制,只可以存储基本数据类型.我就拿来用用,没想到Shar ...
- android闹钟的需求分析,手机小闹钟需求分析
Android 手机小闹钟 日常生活工作中,时常会有一些重要事情或日程安排,而闹钟作为一种提醒人们的工具,成为很多人生活中不可或缺的一部分. 本软件包括的功能有闹钟设置.闹钟创建.闹钟关闭等模块.本应 ...
- android 齿轮动画,Android仿正点闹钟时间齿轮滑动效果
看到正点闹钟上的设置时间的滑动效果非常好看,自己就想做一个那样的,在网上就开始搜资料了,看到网上有的齿轮效果的代码非常多,也非常难懂,我就决定自己研究一下,现在我就把我的研究成果分享给大家.我研究的这 ...
- android闹钟 失效,Android闹钟启动时间设置无效问题的解决方法
Android开发中,alarmManager在5.0以上系统,启动时间设置无效的问题 做一个app,需要后台保持发送心跳包.由于锁屏后CPU休眠,导致心跳包线程被挂起,所以尝试使用alarmMana ...
- Android时间触发,设置闹钟管理器Android中的时间 - 立即触发闹钟
这里我试图通过使用AlarmManger类设置闹钟.它与我工作正常,但当我设置闹钟时间后小时或分钟时间选择器,它会立即启动时,我保存该报警.闹钟.我需要警报熄灭,直到我设定时间. 下面是我的代码正在工 ...
- android指定日期闹钟,如何在android中设置特定日期的闹钟?
嗨我需要使用时间选择器来设置特定日期的闹钟.当我给出静态输入时,闹钟设置不正确并响铃. 例如:我给静态输入(与日期,月份和年份),但它不振铃.这是我的代码.如何在android中设置特定日期的闹钟? ...
最新文章
- uva-10400-搜索
- apk私钥_apksigner | Android 开发者 | Android Developers
- 师生脑信息传递的证据:部分学习还是整体学习?
- Ubuntu安装软件失败
- boost::uuid::string_generator相关的测试程序
- linux命令去除重复的值,学习linux的Split 命令-linux下去除重复的命令uniq用法...-linux下join与paste命令的用法_169IT.COM...
- 后端技术:盘点HashMap 的7种遍历方式
- 里加一列为1_9月1号新宠物食品法规实施啦,辣鸡宠物食品遭殃,你也可能违法...
- pytorch——计算图与动态图机制
- 三种方法实现轮播图配置,史上最简方法~
- 【LeetCode 剑指offer刷题】发散思维题2:43 n个骰子的点数
- SQL2005 第一次配置没有服务器名称的问题
- PDF Expert for mac(专业pdf编辑器)兼容12系统兼容m1
- GoogLeNet网络结构学习
- Python实现视频转 gif 动图
- Android Vibrator(震动服务)
- 机器学习模型中的评价指标
- 我所关心的POS打印机技术参数
- java 牛客网之[动态规划 简单]NC3 nico和niconiconi
- 初学MSP430F5529时钟以及FLL配置
热门文章
- webscraper 爬取二级网页_Web Scraper 高级用法——抓取二级网面 | 简易数据分析 13...
- JavaScript--函数--参数--事件函数的关系--形参和实参
- 数据治理:企业数据治理蓝图
- 微信小程序云开发上传word文档到云存储器
- CES Asia 2017:国内厂商大秀黑科技Hold住全场
- 关于STL中的greaterT()和lessT()
- ccpc 2016 合肥站 (5道题)
- 第十三课 斗地主项目课③游戏音乐与音效及本地存储
- Python金融系列第八篇:Fama-French 多因子模型
- Python 黑帽编程1.2 基于VS Code构建Python开发环境 --转载---玄魂工作室