2016-11-06 74 views
-3

不要低估它..如果您认为问题需要澄清,然后评论问题。广播接收器每次调用

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

代码: -

要求在mainActivity.java的功能onCreate()

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扩展广播接收器{

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.午夜不叫。

回答

0

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

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

+0

如果我使用确切的方法,那么它只会调用一次,我从文档@Karakuri –

+0

@AnkurKhandelwal了解到,所以在完成工作以安排下一次唤醒之后再次调用'setExact()'。 – Karakuri