首页 > 解决方案 > 警报管理器在 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();
}
}

标签: javaandroidalarmmanager

解决方案


如文档中所述

从 Android 4.4(API 级别 19)开始,所有重复警报都是不准确的。请注意,虽然 setInexactRepeating() 是对 setRepeating() 的改进,但如果应用程序的每个实例大约在同一时间访问服务器,它仍然可能使服务器不堪重负。因此,对于网络请求,为您的警报添加一些随机性,如上所述。

您可以使用“setInexactRepeating()”或设置一个确切的时间警报,然后在 On Receive 方法中设置下一个警报

还要确保您将接收器添加到清单文件中,在应用程序标记之间,例如

 <receiver android:name=".AlarmToastReciever"
            android:enabled="true">
            <intent-filter>

                </intent-filter>
            </receiver>

推荐阅读