每次都调用广播接收器

时间:2016-11-06 05:16:49

标签: java android alarmmanager android-broadcastreceiver

不要贬低它..如果您认为问题需要澄清,那么请对此问题进行评论。

我想在午夜更新我的sqlite表,因此呼叫广播接收器自动在午夜点击,即不启动应用程序。但每次启动应用时都会更新

代码: -

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.每当我启动应用程序时,都会调用此广播接收器。          它不是在午夜召唤的。

1 个答案:

答案 0 :(得分:0)

首先,你正在制作一个过去时间的Calendar。这会导致警报立即触发。您需要在将小时设置为零后添加一天。

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