android - 在另一个pendingintent中取消一个AlarmManager的pendingIntent

标签 android alarmmanager

我想取消定义一个服务的AlarmManager,在这个服务中可能会启动一个新的AlarmManger或取消之前定义的警报。我知道alarmManager.cancel(PendingIntent)中的参数pendingintent,必须相同。与filterEquals比较(其他 Intent ) 但它仍然不起作用。取消失败。 这是我的代码

public class GetRoundStroe {
    private Store[] stores;
    private Context mContext;

    public GetRoundStroe(Context mContext) {
        this.mContext = mContext;
    }

    public Store[] getStores() {
        if (ComCommand.haveInternet(mContext)) {
            start_am_normal();
        } else {
            start_am_silence();
        }
        return stores;
    }

    public Store[] start_am_silence() {


        long firstTime = SystemClock.elapsedRealtime();

        AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);

        if (AlarmHolder.mAlarmNormal != null) {
            am.cancel(AlarmHolder.mAlarmNormal);

        }

        am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                firstTime, TestSwitch.getInstance().getSilence_time(), AlarmHolder.mAlarmSilence);


        return null;


    }

    public Store[] start_am_normal() {


        long firstTime = SystemClock.elapsedRealtime();

        AlarmManager am = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);

        if (AlarmHolder.mAlarmSilence != null) {
            MyLog.e(GetRoundStroe.class,"AlarmHolder.mAlarmSilence"+AlarmHolder.mAlarmSilence+"");
            am.cancel(AlarmHolder.mAlarmSilence);
        }
        am.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
                firstTime, TestSwitch.getInstance().getNormal_time(), AlarmHolder.mAlarmNormal);

        return null;
    }

    private static final class AlarmHolder {
        static final PendingIntent mAlarmSilence = PendingIntent.getService(ApplicationContext.getInstance(),
                0,
                new Intent(ApplicationContext.getInstance(), GetRoundSilenceService.class),
                0);

        static final PendingIntent mAlarmNormal = PendingIntent.getService(ApplicationContext.getInstance(),
                0, new
                Intent(ApplicationContext.getInstance(), GetRoundNormalService.class),
                0);

    }
}

GetRoundSilenceService 和 GerRoundNormalService 调用 start_am_normal() 或 start_am_silence;任何人都可以帮助我吗?谢谢

最佳答案

   myIntent = new Intent(SetActivity.this, AlarmActivity.class);
   pendingIntent = PendingIntent.getActivity(CellManageAddShowActivity.this,
       id, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
   pendingIntent.cancel();
   alarmManager.cancel(pendingIntent);

这些代码行肯定可以帮助您删除/取消待处理的 Intent 和警报。

你需要的主要是:

  1. 使用相同的 id 和适当的 Intent FLAG 创建待处理 Intent。
  2. 取消待处理的 Intent 。
  3. 使用警报管理器取消警报。

关于android - 在另一个pendingintent中取消一个AlarmManager的pendingIntent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11681095/

相关文章:

android - handler.postDelayed 对比 AlarmManager 对比

android - 传入 FragmentStatePagerAdapter 的 FragmentManager 有什么用?

android - 如何删除Facebook "Currently Ineligible for Submission"?

Android Gradle 3 构建失败

java - 即使应用程序关闭,Android 也会每天发送通知

android - 警报管理器未在 android 中的确切时间触发警报

c# - Xamarin.Android中如何获取AlarmManager系统服务

android - Android Studio Gradle问题中的Flutter项目

java - Android中的车辆跟踪系统

android - java.lang.SecurityException : ! @Too many alarms (500) 从 pid 10790 uid 10206 注册