当前位置: 首页 > 知识库问答 >
问题:

取消另一个挂起事件中的AlarmManager挂起事件

东方弘壮
2023-03-14

我想取消定义服务的AlarmManager,在此服务中可以启动新的AlarmManager或取消以前定义的报警。我知道alarmManager里的params Pendingtent。取消(挂起内容),必须相同。与filterEquals(Intent other)相比,它仍然不起作用。取消失败。这是我的密码

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);

    }
}

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

共有2个答案

施博文
2023-03-14

@MKJParekh的答案是正确的,但我想补充更多信息,以便我们都知道哪些可行,哪些不可行。

假设在activityA上,您创建并设置AlarmManager,使其在30秒内打开activityC,然后在其他任何活动上,我们希望取消该AlarmManager。因此,我们将做以下工作:;

在activityA中,我们创建并设置AlarmManager;

//activityA
Intent myIntentA = new Intent(actvityA.this, activityB.class)
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
PendingIntent myPendingIntent = PendingIntent.getActivity(activityA.this, 0, myIntentA, PendingIntent.FLAG_ONE_SHOT);

//Calendar with the time we want to fire the Alarm
Calendar calendar = Calendar.getInstance();   // Get Current Time
calendar.add(Calendar.SECOND,30);      //Fire Alarm in 30 seconds from Now.                  

((AlarmManager)getSystemService(ALARM_SERVICE)).setExact(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), myPendingIntent);

在稍后的另一个活动中,我们希望取消在activityA中创建的、我们无法访问的AlarmManager。我们将此活动称为activityZ;

//activityZ
Intent myIntentZ = new Intent(activityZ.this, activityB.class);
PendingIntent pendingIntentZ = PendingIntent.getActivity(activityZ.this, 0, myIntentZ, PendingIntent.FLAG_ONE_SHOT);

((AlarmManager)getSystemService(ALARM_SERVICE)).cancel(pendingIntentZ);

一些要点,

我们在activityA的新意图(上下文)和getActivity(上下文)中提供的上下文是相同的,但是它们不必与我们取消AlarmManager的活动相匹配,在这种情况下,activityZ有另一个上下文。

我们想用AlarmManager打开的类在两个活动中必须相同(context,activityB.class),请求代码(int)必须相同,我在本例中使用了0。最后,两个活动中的标志必须相同。FLAG\u ONE\u SHOT。

<代码>我的意图。setFlags(Intent.FLAG\u ACTIVITY\u NEW\u TASK) 。如果我们在现有活动的上下文之外启动活动,则getActivity需要它。

商瀚
2023-03-14
   myIntent = new Intent(SetActivity.this, AlarmActivity.class);
   pendingIntent = PendingIntent.getActivity(CellManageAddShowActivity.this,
       id, myIntent, PendingIntent.FLAG_UPDATE_CURRENT);
   pendingIntent.cancel();
   alarmManager.cancel(pendingIntent);

这些代码行肯定可以帮助您删除/取消挂起的意图和警报。

您需要的主要内容是:

  1. 使用相同的id和适当的意图标志创建挂起的意图
 类似资料:
  • 参数pendingTransactions表示订阅处于pending状态的交易。 调用: web3.eth.subscribe('pendingTransactions' [, callback]); 参数: type:String - "pendingTransactions",订阅类型 callback:Function - 可选的回调函数,其第一个参数为错误对象,第二个参数为结果 返回值:

  • 我对ActiveMQ有一个类似的问题:http://activemq.2283324.n4.nabble.com/Messages-stuck-in-pending-td4617979.html已经尝试了这里发布的解决方案。 有些消息似乎卡在队列上,可以在那里坐几天而不被消费。我有足够多的消费者大部分时间都是免费的,所以这不是消费者“饱和”的问题。 重新启动ActiveMQ后,一些待处理的消息会立

  • 问题内容: 我有一个使用SSL传输的activeMQ代理。我大约有10位使用代理的消费者。我正在使用骆驼配置路线。 即使我重新启动使用者,它总是挂断并且不会使用新消息,即使队列中有待处理的消息也是如此。 我开始尝试一次遍历我的消费者,试图找出问题所在,以找出问题的根源。我终于找到了一个消费者,我可以重新解决这个问题。一段时间后它将挂起,但是,如果我进入活动的MQ管理控制台并尝试查看队列中的消息,它

  • 问题内容: 由于几个小时后,每次您执行session_start时,我们的服务器都会挂起。 为了进行测试,我创建了一个脚本,如下所示: 从控制台调用它会挂起,甚至无法用ctrl- c停止,只能杀死-9作品。通过Apache调用它也是一样。保持为空,但权限绝对可以,www可以写,并且还具有所有父文件夹的读取权限。 根据管理员的说法,服务器上没有进行任何更改,也没有为会话注册特殊代码。服务器是Cent

  • 问题内容: 我有一个用于下载文件的网络界面。当请求进入时,我的glassfish服务器从Web服务流式传输文件,然后将内容写入输出流。我的代码工作正常,除非当文件大小变得很大(如200 MB以上)时,它挂起,显示0%在浏览器中下载,并且文件从未下载。 当我在while循环内移动flush()方法时,它也适用于大型文件。我不确定将flush()放入循环是否有问题。不知道这东西实际上是如何工作的。我的