我想在点击button按钮时取消第二个闹钟,可是它照样闹了,请教下高人,问题出在哪?public class MainActivity extends Activity {
private Button btn;
private final static String tag_one = "ALARM_ONE";
private final static String tag_two = "ALARM_TWO";
private final static int requestcode_1 =1;
private final static int requestcode_0 =0;
private Alarm alarm;
private MyBroadcastReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) this.findViewById(R.id.button1);
btn.setOnClickListener(btnlistener);
alarm = new Alarm(this ,18 ,50 ,tag_one ,requestcode_0);
alarm.setReminder();
alarm = new Alarm(this ,18 ,51 ,tag_two ,requestcode_1);
alarm.setReminder();
}
private OnClickListener btnlistener = new OnClickListener(){ @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
alarm.closealarm(MainActivity.this,requestcode_1);
}};
public class MyBroadcastReceiver extends BroadcastReceiver{ @Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals(tag_one)){
Toast.makeText(context, "第一个闹钟响了!", Toast.LENGTH_LONG).show();
alarm.closealarm(MainActivity.this,requestcode_0);
}
if(intent.getAction().equals(tag_two)){
Toast.makeText(context, "第二个闹钟响了!", Toast.LENGTH_LONG).show();
alarm.closealarm(MainActivity.this,requestcode_1);
}
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
receiver=new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(tag_one); //动态注册BroadcastReceiver
filter.addAction(tag_two);
registerReceiver(receiver, filter);
super.onResume();
}}public class Alarm {
private Context context;
private int hourOfDay;
private int minute;
private String tag;
public int ruquest;
public Alarm(Context context ,int hour ,int minute ,String tag ,int requestcode){
this.context = context;
this.hourOfDay = hour;
this.minute = minute;
this.tag = tag;
this.ruquest = requestcode;
}
public void setReminder(){
AlarmManager mAlarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent();
intent.setAction(tag);
PendingIntent pending = PendingIntent.getBroadcast(context, ruquest, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
mAlarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pending);
}
public void closealarm(Context context ,int request){
AlarmManager mAlarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent();
PendingIntent pending = PendingIntent.getBroadcast(context, request, intent, 0);
mAlarm.cancel(pending);
}
}
private Button btn;
private final static String tag_one = "ALARM_ONE";
private final static String tag_two = "ALARM_TWO";
private final static int requestcode_1 =1;
private final static int requestcode_0 =0;
private Alarm alarm;
private MyBroadcastReceiver receiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) this.findViewById(R.id.button1);
btn.setOnClickListener(btnlistener);
alarm = new Alarm(this ,18 ,50 ,tag_one ,requestcode_0);
alarm.setReminder();
alarm = new Alarm(this ,18 ,51 ,tag_two ,requestcode_1);
alarm.setReminder();
}
private OnClickListener btnlistener = new OnClickListener(){ @Override
public void onClick(View arg0) {
// TODO Auto-generated method stub
alarm.closealarm(MainActivity.this,requestcode_1);
}};
public class MyBroadcastReceiver extends BroadcastReceiver{ @Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
if(intent.getAction().equals(tag_one)){
Toast.makeText(context, "第一个闹钟响了!", Toast.LENGTH_LONG).show();
alarm.closealarm(MainActivity.this,requestcode_0);
}
if(intent.getAction().equals(tag_two)){
Toast.makeText(context, "第二个闹钟响了!", Toast.LENGTH_LONG).show();
alarm.closealarm(MainActivity.this,requestcode_1);
}
}
}
@Override
protected void onResume() {
// TODO Auto-generated method stub
receiver=new MyBroadcastReceiver();
IntentFilter filter = new IntentFilter();
filter.addAction(tag_one); //动态注册BroadcastReceiver
filter.addAction(tag_two);
registerReceiver(receiver, filter);
super.onResume();
}}public class Alarm {
private Context context;
private int hourOfDay;
private int minute;
private String tag;
public int ruquest;
public Alarm(Context context ,int hour ,int minute ,String tag ,int requestcode){
this.context = context;
this.hourOfDay = hour;
this.minute = minute;
this.tag = tag;
this.ruquest = requestcode;
}
public void setReminder(){
AlarmManager mAlarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent();
intent.setAction(tag);
PendingIntent pending = PendingIntent.getBroadcast(context, ruquest, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE, minute);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
mAlarm.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pending);
}
public void closealarm(Context context ,int request){
AlarmManager mAlarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent();
PendingIntent pending = PendingIntent.getBroadcast(context, request, intent, 0);
mAlarm.cancel(pending);
}
}
解决方案 »
- 大牛帮忙指点一下反编译后的代码
- 关于android点击ListView的item后变色
- 【开发】android mms
- EditText 怎么变成了变成黑底白字
- 真机 INSTALL_FAILED_MISSING_SHARED_LIBRARY
- android异常信息
- android shadowcolor 不能使用selector吗?
- 关于图片动画
- 请问关于checkbox的选择问题
- LitePal 可以使用外部DB数据库文件(assets或者raw目录下数据库表)么?
- android手机扫描wifi信号并发送到服务器端
- Activity读取的XML内,控件太多导致超出屏幕长度范围,显示出错,求解决方法~
Remove any alarms with a matching Intent. Any alarm, of any type, whose Intent matches this one (as defined by filterEquals(Intent)), will be canceled.Parameters
operation IntentSender which matches a previously added IntentSender.
See Also
set(int, long, PendingIntent)
public void setReminder(){
AlarmManager mAlarm = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent();
intent.setAction(tag);
PendingIntent pending = PendingIntent.getBroadcast(context, ruquest, intent, 0);你设置了、闹钟的时候intent 包含一个tag 当你取消的时候 你是否也要 包含这个tag 我是根据android develop 对API的解释猜测 SDK里面有一句(as defined by filterEquals(Intent)),
public boolean filterEquals (Intent other)Added in API level 1
Determine if two intents are the same for the purposes of intent resolution (filtering). That is, if their action, data, type, class, and categories are the same. This does not compare any extra data included in the intents.你可以尝试一下 在你取消的intent中包含那个tag