2013-07-19 68 views
9

嗨我目前正在使用AlarmManager。我写了下面给出的代码。根据代码,AlarmManager应该在10秒后触发,但是在我的代码中,警报管理器立即触发。请帮忙。立即触发报警管理器

public class MainActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE); 
     int alarmType = AlarmManager.ELAPSED_REALTIME_WAKEUP; 
     long timeOrLengthofWait = 10000; 
     Intent intentToFire = new Intent(this, AlarmReciever.class); 
     PendingIntent alarmIntent = PendingIntent.getBroadcast(this, 0, intentToFire, 0); 
     alarmManager.set(alarmType, timeOrLengthofWait, alarmIntent); 
    } 
} 

而且我AlarmReciever类

public class AlarmReciever extends BroadcastReceiver { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

     String phoneNumberReciever="5556"; 
     String message="Alarm Triggered"; 
     SmsManager sms = SmsManager.getDefault(); 
     sms.sendTextMessage(phoneNumberReciever, null, message, null, null); 
     Toast.makeText(context," A message has been sent", Toast.LENGTH_LONG).show(); 

     Log.d("Alarm ", "Alarm Has been triggered and sms send"); 
    } 
} 

我的清单已经添加所需的权限。

回答

10

您正在使用的报警类型为ELAPSED_REALTIME_WAKEUP。这意味着set()的第二个参数必须是从现在起的毫秒数,现在表示为SystemClock.elapsedRealtime()

如果你的目标是让这种情况发生10000毫秒从您做出set()通话的时候,提到set()调用应该是:

alarmManager.set(alarmType, SystemClock.elapsedRealtime()+timeOrLengthofWait, alarmIntent); 
+0

非常感谢你的帮助和工作:) –

+2

作为一个adition,documentarion说:“如果你指定的触发时间是过去,报警立即触发。”您在问题中提供的10000的时间戳肯定代表过去的日期。这是您的闹钟立即触发的原因。 更多信息请访问https://developer.android.com/training/scheduling/alarms.html#set – androidevil

11

如果你在过去的时间报警的创建的PendingIntent这将是立即开火。示例 - 今天上午8点安排闹钟,但在11AM左右执行代码将立即开始。

解决方案:

cal.add(Calendar.DATE, 1); 

long delay = 24 * 60 * 60 * 1000; 
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, cal.getTimeInMillis(), delay,pendingIntent);` 

这将在指定的时间(即)上午8时开枪第二天的事件;

+3

“如果您正在为过去的时间创建警报的PendingIntent,它将立即被触发”。帮了我很多。 – androidStud