您的位置:首页 > 移动开发

android studio tabhost基础 多功能时钟app 闹钟执行后清除 alarmmanager(六)

2016-07-26 17:10 656 查看
通过alarmmanager.cancel方法进行清除闹钟操作,代码如下:

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操作
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: