警报管理器立即触发

时间:2013-07-19 21:12:01

标签: android alarmmanager

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

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 Class

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

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

2 个答案:

答案 0 :(得分:16)

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

如果您的目标是在拨打set()电话后10000毫秒内发生这种情况,那么set()电话应该是:

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

答案 1 :(得分:14)

如果您要在过去一段时间内创建警报的PendingIntent,则会立即触发。示例 - 为今天上午8点安排警报,但在上午11点左右执行代码将立即触发。

解决方案:

cal.add(Calendar.DATE, 1);

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

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

相关问题