Android Alarmmanager-如何使其注册一次

Android Alarmmanager-如何使其注册一次,android,Android,我的应用程序有两个不同的活动,让我们将它们命名为A和B。我在活动A中设置了一个警报,并在5分钟后触发警报。我转到活动B,在那里做一些不到一分钟的事情。我回到活动A,这里发生的是警报再次被注册,而不是之前的5分钟时间,从现在开始需要5分钟…为了清晰起见,动作A-注册警报-5分钟触发蜂鸣音…移动到活动B,B幕-做一些事情-x分钟…移回A幕-再次注册警报-x+5分钟触发蜂鸣声 我不希望发生上述情况。我只想在5分钟内触发警报,而不是x+5?需要帮忙吗?这真的很烦我…我从星期四就开始了 在A幕中 Ala

我的应用程序有两个不同的活动,让我们将它们命名为A和B。我在活动A中设置了一个警报,并在5分钟后触发警报。我转到活动B,在那里做一些不到一分钟的事情。我回到活动A,这里发生的是警报再次被注册,而不是之前的5分钟时间,从现在开始需要5分钟…为了清晰起见,动作A-注册警报-5分钟触发蜂鸣音…移动到活动B,B幕-做一些事情-x分钟…移回A幕-再次注册警报-x+5分钟触发蜂鸣声

我不希望发生上述情况。我只想在5分钟内触发警报,而不是x+5?需要帮忙吗?这真的很烦我…我从星期四就开始了

在A幕中

 AlarmManager am = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
            Intent checkIntent = new Intent(getApplicationContext(),Alarm_class.class);
            checkIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            PendingIntent pi = PendingIntent.getBroadcast(this, 0, checkIntent, 0);

            if(PendingIntent.getBroadcast(getBaseContext(), 0, checkIntent, PendingIntent.FLAG_NO_CREATE) != null)
            {
                Log.d("kunal", "Alarm is running");             
                if(log_days_came.equals("Three"))
                {
                     Log.d("kunal","3 days selected to zip log file.");
                    // am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 180000, pi);
                     am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 2*60000, pi);
                     Log.d("kunal","after the pending intent 3.");
                 }
    }
            else
            {
                if(log_days_came == null)
                {
                    Toast.makeText(getApplicationContext(), "configure the days to zip log files", Toast.LENGTH_LONG).show();
                    Log.d("kunal", "Alarm is not running");
                }

            }

            if(log_days_came.equals("Three"))
            {
                 Calendar calendar2 = Calendar.getInstance();
                 calendar2.setTimeInMillis(System.currentTimeMillis());
                 calendar2.add(Calendar.MINUTE, 3);   
            }

我去B幕…做一些事情…回到A幕…它再次调用警报的OnReceive,而触发器没有过期…我做错了什么?

你能发布一些代码吗?您是否碰巧在onResume()中设置了报警?请尝试在“共享首选项”lis isAlarmSet中保存任何布尔值,并在“活动开始”时进行检查;如果未设置报警,请尝试设置报警。@JaiSoni我想是的,但不幸的是,我不知道要编写的代码…如果在onResume中设置了报警,则代码片段不会显示。这就解释了为什么以前的任何报警都会被取消。@ekholm:我在onCreate中运行此功能……如何在Resume中运行此功能?