如何停止从另一个活动重复警报

时间:2013-05-04 11:27:17

标签: android alarmmanager android-pendingintent

我在我的应用中为多个任务设置了重复闹钟。我正在收到所有任务通知。但是当我点击关闭按钮时,警报没有取消。 我已经向用户创建了Alert Dialog通知。

我将DB _id传递给PendingIntent UniqueId,以便针对不同任务发出多个警报。警报响铃但没有停止。请指导我这样做。

这是我正在设置闹钟的Activity类

protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.alarm_layout);
// some code..
setalarm.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View arg0) {
        // TODO Auto-generated method stub

        idval=idval+1;    // Fetching this Id from DB.
        alarm_intent= new Intent(AlarmActivity.this, ReceiverActivity.class);
        alarm_intent.putExtra("STR_TEXT", str_text);
        alarm_intent.putExtra("CLS_ID", idval);
        pendingIntent = PendingIntent.getBroadcast(AlarmActivity.this, idval, alarm_intent, PendingIntent.FLAG_UPDATE_CURRENT);

        Date dat  = new Date();//initializes to now
        Calendar cal_alarm = Calendar.getInstance();
        Calendar cal_now = Calendar.getInstance();
        cal_now.setTime(dat);

    //  mYear, mMonth, mDay, mhours24, mminutes taking this vales from DatePicker & TimePicker

cal_alarm.set(mYear, mMonth, mDay, mhours24, mminutes, 0);
        if(cal_alarm.before(cal_now))
        {
            cal_alarm.add(Calendar.DATE,1); //if its in the past increment
        }

        String temp_val=(String)spinner1.getSelectedItem(); 
        AlarmManager noteam = (AlarmManager)getSystemService(Context.ALARM_SERVICE);                
        if(temp_val.equals("One Time"))
        {
            noteam.set(AlarmManager.RTC_WAKEUP, cal_alarm.getTimeInMillis(), pendingIntent);
       }
        else if(temp_val.equals("Every 5 Minutes"))
        {
            noteam.setRepeating(AlarmManager.RTC_WAKEUP, cal_alarm.getTimeInMillis(), 300000, pendingIntent);
      }
        else if(temp_val.equals("Every 10 Mintues"))
        {
            noteam.setRepeating(AlarmManager.RTC_WAKEUP, cal_alarm.getTimeInMillis(), 600000, pendingIntent);
        }
        else if(temp_val.equals("Every 30 Minutes"))
        {
            noteam.setRepeating(AlarmManager.RTC_WAKEUP, cal_alarm.getTimeInMillis(), 1800000, pendingIntent);
        }
        else if(temp_val.equals("Every 1 hour"))
        {
            noteam.setRepeating(AlarmManager.RTC_WAKEUP, cal_alarm.getTimeInMillis(), 3600000, pendingIntent);
        }
    }
});

}

和我取消闹钟的另一个Activity

protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState); 

        //some code..
        clsID=extra.getInt("CLS_ID");
        new AlertDialog.Builder(AlertBoxNotification.this)
        .setTitle("Title")
        .setMessage("Message for user")
        .setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
        @SuppressLint("NewApi")
        @Override
            public void onClick(DialogInterface arg0, int arg1) {
            // TODO Auto-generated method stub
                finish();
                arg0.dismiss();
            }
        })
        .setNegativeButton(R.string.dismissbtn, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface arg0, int arg1) {
            Intent intent = new Intent(AlertBoxNotification.this, AlarmActivity.class);
                    PendingIntent psender = PendingIntent.getBroadcast(AlarmActivity.mycontext = getApplicationContext(), clsID, intent, 0);
                    AlarmManager am = (AlarmManager)getSystemService(ALARM_SERVICE);
                    am.cancel(psender);
                    Toast.makeText(getApplicationContext(), "Alarm cancel ", Toast.LENGTH_LONG).show();

            }
        }).create().show();
    }

2 个答案:

答案 0 :(得分:1)

我已经改变了这个

PendingIntent psender = PendingIntent.getBroadcast(AlarmActivity.mycontext = getApplicationContext(), clsID, intent, 0);

 pISender = PendingIntent.getBroadcast(getBaseContext(), clsID, intent, 0);

并将PendingIntent设为全局。 现在警报正在从其他活动取消(来自对话框)。

答案 1 :(得分:0)

Pending intent的请求代码在两个地方都需要相同。