我有一个调用帮助器的活动,在那里创建一个通知,在选定的时间内弹出。它效果很好。从服务中删除待处理的警报/通知
我想在不同的活动中创建另一个功能,可以在通知弹出之前删除未决的警报。我尝试了很多我在网上找到的方式,但没有成功。我究竟做错了什么?
// Add Alarm
public class Helper {
public void SetAlarm(Activity activity, int requestCode, Calendar calendar, String title, ArrayList<PendingIntent> intentArray) {
AlarmManager alarmManager = (AlarmManager)activity.getSystemintent(Context.ALARM_intent);
Intent intent = new Intent(activity.getBaseContext(), MyReceiver.class);
intent.putExtra("title",title);
PendingIntent pendingIntent = PendingIntent.getBroadcast(activity, requestCode, intent, 0);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
intentArray.add(pendingIntent);
}
}
// Delete Alarm
public class MyActivity extends Activity {
ProgressDialog progress;
// ...
public void Delete(int requestCode , String title) {
progress = ProgressDialog.show(this, getString(R.string.title), getString(R.string.text), true);
new Thread(new Runnable() {
@Override
public void run()
{
// ....
runOnUiThread(new Runnable() {
@Override
public void run()
{
try {
Intent intent = new Intent(getBaseContext(), MyReceiver.class);
intent.putExtra("title",title); // don't know if really needed
AlarmManager alarmManager = (AlarmManager)getSystemintent(Context.ALARM_intent);
PendingIntent pi = PendingIntent.getBroadcast(this, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.cancel(pi);
// Tried that also - didn't work:
// PendingIntent.getBroadcast(this, requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT).cancel();
// pi.cancel();
}
catch(Exception e) {
// ...
}
progress.dismiss();
}
});
}
}).start();
}
}
// BroadcastReceiver
public class MyReceiver extends BroadcastReceiver
{
@Override
public void onReceive(Context context, Intent intent)
{
Intent newIntent = new Intent(context, MyAlarmService.class);
newIntent.putExtra("title", intent.getExtras().getString("title"));
context.startService(newIntent);
}
}
public class MyAlarmService extends Service
{
// ...
@SuppressWarnings("static-access")
@Override
public int onStartCommand(Intent intent, int flag, int startId)
{
super.onStartCommand(intent, START_STICKY, startId);
mManager = (NotificationManager) this.getApplicationContext().getSystemService(this.getApplicationContext().NOTIFICATION_SERVICE);
Intent intent1 = new Intent(this.getApplicationContext(), MainActivity.class);
intent1.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP| Intent.FLAG_ACTIVITY_CLEAR_TOP);
PendingIntent pendingNotificationIntent = PendingIntent.getActivity(this.getApplicationContext(),0, intent1,PendingIntent.FLAG_UPDATE_CURRENT);
Notification notification = new Notification.Builder(this.getApplicationContext())
.setContentTitle(getString(R.string.app_name))
.setContentText(getString(R.string.conText))
.setWhen(System.currentTimeMillis())
.setContentIntent(pendingNotificationIntent)
.build();
notification.flags |= Notification.FLAG_AUTO_CANCEL;
mManager.notify(0, notification);
return START_STICKY;
}
}
当您取消PendingIntent时,您需要提供相同的'Intent'。 – Machado 2015-03-10 19:57:07
这是一个完全不同的活动。我如何使用相同的意图?我不能重新创建它吗? – TamarG 2015-03-10 20:08:58
http://stackoverflow.com/questions/19593442/android-get-same-intent-from-different-activities – Machado 2015-03-10 20:12:00