2016-05-25 15 views
0

私はAndroid AlarmManagerで作業していますが、自分のコードに1つの問題が見つかりました。アラームマネージャーは別の時間にも呼び出されますが、原因はわかりません。私は午前7時10分にアラームを発しましたが、午後3時10分、午後4時30分などAndroidアラームマネージャは別の時間に呼び出されますか?

MyCode:だから

public void setAlarm(){ 

     Calendar calendar = Calendar.getInstance(); 
     calendar.setTimeInMillis(System.currentTimeMillis()); 
     calendar.set(Calendar.YEAR, calendar.get(Calendar.YEAR)); 
     calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH)); 
     calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + 1); 
     calendar.set(Calendar.HOUR_OF_DAY, 7); 
     calendar.set(Calendar.MINUTE, 10); 
     calendar.set(Calendar.AM_PM,Calendar.AM); 

    Intent intent = new Intent(appContext, MyAlarmManager.class); 
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
    PendingIntent pendingIntent = PendingIntent.getBroadcast(appContext, 0, intent, 0); 

    AlarmManager alarmManager = (AlarmManager) appContext.getSystemService(Context.ALARM_SERVICE); 
    alarmManager.setInexactRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent); 
} 

MyAlarmManager.java

public class MyAlarmManagerextends BroadcastReceiver { 

@Override 
public void onReceive(final Context context, Intent intent) { 

    setAlarm(); 

} } 

、これは上記のコードで、私はコードで間違っているものを知っていると私にいくつかを提案してください溶液。

+0

サービスまたはアクティビティの初期設定は初期化されていますか? –

+0

いいえ、シングルトンクラスにあります – animation123

答えて

1

これはアラームが過去に設定されているため(午前7時10分以降にいつでも設定されるため)、今日午前7時10分を過ぎると1日追加する必要があります。

説明 -

が今日午前8時であり、あなたは午前7時10分にアラームを設定していると仮定し、それは、したがって、それが消灯すでに過ぎている同じ日午前7時10分AMにアラームを設定します

オプション1 - - のいずれかを設定し、日付、月、年などの、あまりにも -

calendar.set(Calendar.DATE, date); 
calendar.set(Calendar.MONTH, month); 
あなたはアプリ

ソリューションを開くたびに

オプション2 - 現在時刻が>アラーム時刻は、アラーム

//If you are past 07:10 AM then 
    calendar.add(Calendar.DATE,1); 
+0

だから、どこで修正するのですか?私に知らせてください – animation123

+0

@ animation123は答えにいくつかのロジックを追加し、あなたの必要性に合ったソリューションを実装しようとしました – PRYM

+0

ありがとう、私は投稿の答えを更新します – animation123

1

あなたがAndroidのバージョンマシュマロ以降を使用している場合、これは起こるかもしれに一日を追加した場合、現在の時刻が何であるかを確認してください。それは、ドーズモードドーズモードAlarmManagerSyncAdapterJobSchedulerようなものを遅延させることにより、バッテリーを節約するために実装され

と呼ばれています。 Dozeモードの詳細については、this linkを参照してください。

関連する問題