每次都调用Broadcast Receiver



不要投反对票。如果你认为问题需要澄清,那就评论这个问题。

我想在午夜更新我的sqlite表,所以调用broadcast receiver在午夜自动点击,即不启动应用程序。但是每次当我启动应用程序时,它都会更新

代码:

onCreate()

中调用mainActivity.java中的函数
private void setTheTimeToUpdateTables(Context context) {
        Log.i("Update table function","Yes");
        AlarmManager alarmManager=(AlarmManager) getSystemService(ALARM_SERVICE);
        Intent alarmIntent=new Intent(context,UpdateTables.class);
        PendingIntent pendingIntent=PendingIntent.getBroadcast(context,0,alarmIntent,PendingIntent.FLAG_UPDATE_CURRENT);
        alarmManager.cancel(pendingIntent);
        Calendar alarmStartTime = Calendar.getInstance();
        alarmStartTime.setTimeInMillis(System.currentTimeMillis());
        alarmStartTime.set(Calendar.HOUR_OF_DAY, 0);
        alarmStartTime.set(Calendar.MINUTE, 1);
        alarmStartTime.set(Calendar.SECOND, 0);

        System.out.println("Updating table time "+alarmStartTime);
        System.out.println("Time in millseconds "+alarmStartTime.getTimeInMillis());

        alarmManager.setInexactRepeating(AlarmManager.RTC,alarmStartTime.getTimeInMillis(),AlarmManager.INTERVAL_DAY,pendingIntent);
        Log.d("Alarm","Set for midnight");
    }

公共类UpdateTables扩展BroadcastReceiver {

DbHelper dbHelper;
ArrayList<ListMedicine> reminderInfo;
@Override
public void onReceive(Context context, Intent intent) {
    dbHelper=new DbHelper(context);
    Log.i("Service Start", CalculateDaysService.TAG);
    context.startService(new Intent(context,CalculateDaysService.class));

    Log.i("Done","Yes");
}
}

问题:- 1。每当我启动应用程序时,这个广播接收器都会被调用。2. 它不会在午夜被召唤。

首先,您正在制作一个时间位于过去的Calendar。这将导致告警立即触发。

设置小时为零后需要增加一天。

第二,setInexactRepeating()不会使它在午夜触发。我建议您阅读该方法的文档以及AlarmManager的其他方法,因为听起来您应该使用setExact()方法之一。

最新更新