我正在尝试将警报管理器设置为工作状态,只是简单的时间表,每分钟触发一次吐司,但是它不起作用,代码有什么问题?
主要活动:
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();
}
}
答案 0 :(得分:1)
如文档所述
从Android 4.4(API级别19)开始,所有重复的警报都不精确。请注意,尽管setInexactRepeating()是对setRepeating()的改进,但如果每个应用实例都在同一时间访问服务器,它仍然会使服务器不堪重负。因此,对于网络请求,如上所述,为警报添加一些随机性。
您可以使用“ setInexactRepeating()”或设置确切的一次警报,然后在“接收时”方法中设置下一个警报
还要确保您已将接收者添加到清单文件中的应用程序标记之间,例如
<receiver android:name=".AlarmToastReciever"
android:enabled="true">
<intent-filter>
</intent-filter>
</receiver>
答案 1 :(得分:0)
使用此代码初始化警报管理器。
public void setupAlarm() {
final Calendar calNow = Calendar.getInstance();
final Calendar calSet = (Calendar) calNow.clone();
calSet.set(Calendar.HOUR_OF_DAY, calNow.get(Calendar.HOUR_OF_DAY));
calSet.set(Calendar.MINUTE, calNow.get(Calendar.MINUTE) + 1);
calSet.set(Calendar.SECOND, calNow.get(Calendar.SECOND));
final Intent intent = new Intent(this, UploadStarterReceiver.class);
final PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 1,
intent, 0);
final AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calSet.getTimeInMillis(),
60 * 1000, pendingIntent);
}