最好用作 SetRepeating() 在 19 个 API 之后不起作用



我正在对以前的实习学生开发的应用程序进行一些支持工作,该应用程序是一个接受用户输入的应用程序,例如 5。这意味着警报将每 5 分钟响起一次。

她的应用程序又回到了我身边,因为闹钟有自己的想法并且不一致。这是她正在使用的代码:

alertDialogBuilder = new AlertDialog.Builder(MainActivity.this);
//set alert
alertDialogBuilder
.setTitle("IP Check frequency: " + time.getText() + " minutes")
.setMessage("Processing commenced at n" + startTime.getText())
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (currentTime.after(alarmTime)) {
Toast.makeText(MainActivity.this, "Missed first alert", Toast.LENGTH_LONG).show();
}
intent1 = new Intent(MainActivity.this, MyBroadcastReceiver.class);
i = Integer.parseInt(time.getText().toString());
scTime2 = (i * 60 * 1000); //5 minutes before set time
pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);
manager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
manager.setRepeating(AlarmManager.RTC_WAKEUP, timeCommenced, scTime2, pendingIntent);
Toast.makeText(MainActivity.this, "Alert Set", Toast.LENGTH_SHORT).show();
stopped.setVisibility(View.VISIBLE);
commenced1.setVisibility(View.GONE);
//Change editText to TextView
time.setVisibility(View.GONE);
timeText.setVisibility(View.VISIBLE);
timeText.setText(time.getText().toString());
processingText.setText(R.string.processing_commenced);
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
alertDialog = alertDialogBuilder.create();
alertDialog.show();
}
}

我可以看到她正在使用SetRepeating()并且我已经从 api 级别 19 中读到了这一点,而且这可能是问题所在。

我尝试使用SetExact()但是在方法内部的变量下看到一条红线。

有人能告诉我如何保留变量但保持一致性吗?

谢谢!

setRepeatingsetExact采用不同数量的变量,因此您不能只使用相同的东西而不进行代码更改。

如果您希望在该确切时间触发某些内容,则需要使用setExact并且每次警报触发时,您都需要计算下一次它应该自动归档的时间,并在新的时间再次使用setExact触发。

如果您使用setRepeating操作系统可以/将触发时间推迟到可以同时触发多个警报以节省电池的时间。

你是对的。 根据 https://developer.android.com/reference/android/app/AlarmManager.html#setRepeating(int,%20long,%20long,%20android.app.PendingIntent(

注意:从 API 19 开始,所有重复警报都是不精确的。如果你的 应用程序需要精确的交付时间,那么它必须使用一次性 精确的警报,每次都如上所述重新安排。遗产 目标 SdkVersion 早于 API 19 的应用程序将 继续拥有所有警报,包括重复警报, 被视为精确。

他们建议您做的是使用 set(( 而不是 setRepeating((,后者会触发一次。 触发警报后,在处理程序或挂起意图中再次调用 set((。

相关内容

  • 没有找到相关文章

最新更新