您好我正在使用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");
}
}
我已经在清单中添加了所需的权限。
答案 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点)发射事件;