java - 警报管理器在 60 秒后未启动
问题描述
我正在尝试设置我的警报管理器工作,只是简单的时间表,每分钟触发吐司,但它不起作用,代码有什么问题?
主要活动 :
public void klik(View view) {
startalarm();
}
public void startalarm(){
AlarmManager manager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent;
PendingIntent pendingIntent;
intent = new Intent(this, AlarmToastReciever.class);
pendingIntent = PendingIntent.getBroadcast(this,0,intent,0);
manager.setRepeating(AlarmManager.RTC_WAKEUP, SystemClock.elapsedRealtime()+3000,+60000,pendingIntent);
}
}
AlarmToastReciever 类:
public class AlarmToastReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent){
Toast.makeText(context,"GOWNO", Toast.LENGTH_SHORT).show();
}
}
解决方案
如文档中所述
从 Android 4.4(API 级别 19)开始,所有重复警报都是不准确的。请注意,虽然 setInexactRepeating() 是对 setRepeating() 的改进,但如果应用程序的每个实例大约在同一时间访问服务器,它仍然可能使服务器不堪重负。因此,对于网络请求,为您的警报添加一些随机性,如上所述。
您可以使用“setInexactRepeating()”或设置一个确切的时间警报,然后在 On Receive 方法中设置下一个警报
还要确保您将接收器添加到清单文件中,在应用程序标记之间,例如
<receiver android:name=".AlarmToastReciever"
android:enabled="true">
<intent-filter>
</intent-filter>
</receiver>
推荐阅读
- base64 - 如何复制粘贴 Google 的 SSO 证书以连接 dex?
- javascript - mapkit.js:如何实现注解选中和取消选中时的放大缩小
- c++ - MPI_Isend/MPI_Irecv 在什么条件下等待其关联的完成调用 (MPI_Wait/MPI_Test) 开始数据传输?
- performance - Haskell 中的性能改进
- python - 无论行顺序如何,比较不同行的 DataFrame
- python-3.x - Python 中另一个 API 请求(相同 API)中的 API 请求
- javascript - 自定义 Bootstrap-Vue 复选框组件
- elasticsearch - 带有过滤器的 Elasticsearch bool 查询不适用于带有“-”的字段
- c# - 我被困在我的while循环中,计时器的经过时间作为条件
- python - How to assign a name for a pytorch layer?