2016-11-19 5 views
0

現在の時刻:AlarmManagerないトリガー私はアンドロイドのアラームアプリを作り、以下のコードを使用して、アラームを設定

Calendar alarm = Calendar.getInstance(); 
alarm.set(Calendar.YEAR, year1); 
alarm.set(Calendar.MONTH, month1); 
alarm.set(Calendar.DAY_OF_MONTH, day1); 
alarm.set(Calendar.HOUR_OF_DAY, hour1); 
alarm.set(Calendar.MINUTE, min1); 
alarm.set(Calendar.SECOND, 0); 

if(alarm.before(Calendar.getInstance())) 
{ 
    alarm.add(Calendar.DATE, 1); 
    Toast.makeText(getActivity(),"You selected the past time",Toast.LENGTH_SHORT).show(); 
} 
else 
{   
    Intent myIntent = new Intent(getActivity(), MyReceiver.class); 
    pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent, 0); 
    AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(getActivity().ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC, alarm.getTimeInMillis(), pendingIntent); 
} 

すべてが正常に動作しますが、問題はまた、私は現在の日付を選択し、月、年であります現在の時刻には、「過去の時間を選択しました」と表示されます。この問題を解決するには?

+0

あなたは正しいことをやっていますか、あなたは変数、year1、month1などが正しいと確信していますか? – GiuseppeLabanca

+0

@GiuseppeLabancaうん、私は表示するトーストを使用し、正しく表示されます。現在の時刻と現在の日付を選択した場合、なぜ「選択しました...」と表示されるのか分かりません。 –

+1

これは、コードが 'if'文に達するまで何時間も経過しているからです。少なくともミリ秒の範囲で。したがって、 'alarm'と一緒に初期化された' rightNow'に別のカレンダーオブジェクトを使い、それを使ってifの内部を比較することができます。 – Marat

答えて

0

これを試してください。あなたの問題を解決することを願っています。

Calendar alarm = Calendar.getInstance(); 
Calendar copy = (Calendar) alarm.clone(); 

alarm.set(Calendar.YEAR, year1); 
alarm.set(Calendar.MONTH, month1); 
alarm.set(Calendar.DAY_OF_MONTH, day1); 
alarm.set(Calendar.HOUR_OF_DAY, hour1); 
alarm.set(Calendar.MINUTE, min1); 

int result = alarm.compareTo(copy); 

if (result == 0) 
{ 
    Toast.makeText(getActivity(), "You selected current time", Toast.LENGTH_SHORT).show(); 
} 
else if (result < 0) 
{ 
    alarm.add(Calendar.DATE, 1); 
    Toast.makeText(getActivity(), "You selected the past time", Toast.LENGTH_SHORT).show(); 
} 
else 
{   
    Intent myIntent = new Intent(getActivity(), MyReceiver.class); 
    pendingIntent = PendingIntent.getBroadcast(getActivity(), 0, myIntent, 0); 
    AlarmManager alarmManager = (AlarmManager) getActivity().getSystemService(getActivity().ALARM_SERVICE); 
    alarmManager.set(AlarmManager.RTC, alarm.getTimeInMillis(), pendingIntent); 
} 
+0

'result == 0'と' result <0'はどういう意味ですか?あなたのコードを試しましたが、それでも "過去の時間を選択しました"と表示されます。 –

+0

答えを編集しました。 'alarm'の'秒 'を設定した行を削除しました。今それは動作するはずです。 'alarm'が' copy'に等しい場合、結果は0に設定されます。それが前の場合、結果は0より小さい数値に設定されます。結果が0より大きい後です。 – Marat

+0

ありがとう。アラームで現在の時刻と日付を実行させたいので、 'result == 0'を削除し、'(result <0) '、' else ''と書くだけです。 –

関連する問題