2016-11-06 49 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