android studio tabhost基础 多功能时钟app 闹钟执行后清除 alarmmanager(六)
2016-07-26 17:10
656 查看
通过alarmmanager.cancel方法进行清除闹钟操作,代码如下:
其中在myalarm类里面添加了一个getid方法,是为了呼应
public class Alarm extends LinearLayout { private Button button; private ListView listView; ArrayAdapter<Alarm.myalarm> adapter; private SharedPreferences sp; private static final String ALARM="myalarm"; private AlarmManager alarmManager; public Alarm(Context context) { super(context); init(); } public Alarm(Context context, AttributeSet attrs) { super(context, attrs); init(); } public Alarm(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(); } public void init(){ alarmManager=(AlarmManager)getContext().getSystemService(Context.ALARM_SERVICE); } @Override protected void onFinishInflate() { super.onFinishInflate(); button = (Button) findViewById(R.id.btn1); listView = (ListView) findViewById(R.id.list1); adapter = new ArrayAdapter<Alarm.myalarm>(getContext(), android.R.layout.simple_list_item_1); listView.setAdapter(adapter); sp = getContext().getSharedPreferences("alarm", Context.MODE_PRIVATE); readAlarm(); button.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { addAlarm(); } }); listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> adapterView, View view, final int i, long l) { new AlertDialog.Builder(getContext()).setTitle("operation").setItems(new CharSequence[]{"delete"}, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialogInterface, int i) { switch (i) { case 0: deleteAlarm(i); break; } } }).setNegativeButton("cancel", null).show(); return false; } }); } public void deleteAlarm(int position){ myalarm aa=adapter.getItem(position); adapter.remove(aa); saveAlarm(); alarmManager.cancel(PendingIntent.getBroadcast(getContext(),aa.getId(),new Intent(getContext(),AlarmReceiver.class),0)); } public void addAlarm(){ [b]final Calendar calendar=Calendar.getInstance(); new TimePickerDialog(getContext(), new TimePickerDialog.OnTimeSetListener() { @Override public void onTimeSet(TimePicker timePicker, int hour, int minute) { Calendar c=Calendar.getInstance(); c.set(Calendar.HOUR,hour); c.set(Calendar.MINUTE,minute); c.set(Calendar.SECOND,0); c.set(Calendar.MILLISECOND,0); Calendar currenttime=Calendar.getInstance(); if (c.getTimeInMillis()<currenttime.getTimeInMillis()){ c.setTimeInMillis(c.getTimeInMillis()+24*60*60*1000); } myalarm ad=new myalarm(c.getTimeInMillis()); adapter.add(ad); alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,ad.getTime(), 1*60*1000, PendingIntent.getBroadcast(getContext(),ad.getId(), new Intent(getContext(),AlarmReceiver.class),0)); saveAlarm(); } },calendar.get(Calendar.HOUR),calendar.get(Calendar.MINUTE),true).show(); } public void saveAlarm(){ SharedPreferences.Editor editor=sp.edit(); StringBuffer sb=new StringBuffer(); for (int i=0;i<adapter.getCount();i++){ sb.append(adapter.getItem(i).getTime()).append(","); } if (sb.length()>1){ editor.putString(ALARM,sb.toString().substring(0,sb.length()-1)); }else { editor.putString(ALARM,null); } editor.commit(); } private void readAlarm(){ String content=sp.getString(ALARM,null); if (content!=null){ String[] timeString=content.split(","); for (String string:timeString){ adapter.add(new myalarm(Long.parseLong(string))); } } } class myalarm{ private Calendar date; private long time=0; private String timeLabel=""; public myalarm(long time){ this.time=time; date=Calendar.getInstance(); date.setTimeInMillis(time); timeLabel=String.format("%dM%dD%d:%d",date.get(Calendar.MONTH)+1,date.get(Calendar.DAY_OF_MONTH),date.get(Calendar.HOUR),date.get(Calendar.MINUTE)); } public long getTime() { return time; } public String getTimeLabe() { return timeLabel; } @Override public String toString() { return timeLabel; } public int getId(){ return (int)getTime()/1000/60; } } }
其中在myalarm类里面添加了一个getid方法,是为了呼应
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,ad.getTime(), 1*60*1000, PendingIntent.getBroadcast(getContext(),ad.getId(), new Intent(getContext(),AlarmReceiver.class),0));
以及deletealarm方法中的:
alarmManager.cancel(PendingIntent.getBroadcast(getContext(),aa.getId(),new Intent(getContext(),AlarmReceiver.class),0));
在alarmreceiver中代码如下:
public class AlarmReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { System.out.println("alarm operate"); AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE); am.cancel(PendingIntent.getBroadcast(context,getResultCode(),new Intent(context,AlarmReceiver.class),0)); } }这里也需要执行cancel操作
相关文章推荐
- Swift 版本相册,防微信相册
- 对 AFNetworking 二次封装应用 - POST
- xml的解析
- android拍照获得图片及获得图片后并裁剪
- Android ListView CheckBox状态错乱
- Android实战打飞机游戏之怪物(敌机)类的实现(4)
- 理解$watch ,$apply 和 $digest --- 理解数据绑定过程
- PyGobject(二十)布局容器之ComboBox
- (ros/navigation/gmapping)导航/建地图
- iOS获取当天0点时间
- Android 应用的欢迎界面实现代码
- 结合友盟统计的多渠道快速打包
- android apk嵌套 从一个apk启动另外一个apk
- 解决问题: ----- The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from
- 【微信】微信开发(1)初入微信开发
- Swift基础(二十五)UIPageControl
- OC 与Swift混合开发之相互调用
- Object流
- android studio 创建公共库
- lua cocos2dx UIManager