2016-11-06 3 views
-3

解決しないと思ったら、問題をコメントしてください。ブロードキャストレシーバが毎回呼び出されます

真夜中にsqliteテーブルを更新して、ブロードキャスト受信者に真夜中に自動的にヒットするようにしたい、つまりアプリを起動しないでください。しかし、私はアプリを起動するたびにを更新しています。

コード: -

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にmainActivity.javaに関数を呼び出すは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.真夜中に呼び出されません。

答えて

0

まず、時間が過去のものであるCalendarを作成しています。これにより、アラームがすぐにトリガされます。時間を0に設定してから1日を追加する必要があります。

第2に、setInexactRepeating()は真夜中にトリガーされません。 setExact()メソッドのいずれかを使用する必要があるように聞こえるので、そのメソッドのマニュアルと他のメソッドAlarmManagerを読むことをお勧めします。

+0

もし正確なメソッドを設定すれば、ドキュメントからわかるように@Karakuri –

+0

@AnkurKhandelwalを呼び出すので、次の起床をスケジュールするために作業が終わったら 'setExact()'をもう一度呼び出してください。 – Karakuri

関連する問題