60秒后警报管理器无法启动

时间:2019-10-07 11:11:12

标签: java android alarmmanager

我正在尝试将警报管理器设置为工作状态,只是简单的时间表,每分钟触发一次吐司,但是它不起作用,代码有什么问题?

主要活动:

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();
}
}

2 个答案:

答案 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);
}
相关问题