2016-04-14 5 views
2

毎日アラームを9.00 AM、11 AM、1PMに設定する必要があります。アンドロイドで毎日アラームを3回鳴らすには?

単純な解決策は、3つの異なる保留中のインテントを使用することですが、保留中のインテントと同じものを実装する他の方法はありますか?

ありがとうございました!

+0

ヒント:ArrayList :) –

+0

これは、正確には何を意味するかによって異なります。つまり、 'AlarmManager'の' set *() 'コールで異なる時刻に3つの繰り返しアラームを設定することができます。 –

+0

両方のおかげで、@Mike M、1つの意図で同じことをする方法はありますか? – Swap

答えて

1

おかげで、手に入れた溶液を

は、同じテントに要求コードを変更する必要があります。以前のアラームはキャンセルされません。 Click Here溶液の場合

0

いつでもスケジュールする必要があるアラームの数が限られている場合は、アラームごとにPendingIntentを使用しても問題ありません。

しかし、スケジュールする予定のアラームの数が無制限(またはたぶん多く)の場合は、スケジューリング情報を処理できるスケジューラを提供する方が良いと思います。たとえば、毎日1つまたは複数のイベントを設定できるカレンダーのようなものを作成する必要がある場合は、このような注意事項を考慮する必要があります。あなたが必要な次のアラームを決定する方法

void scheduleNextAlarm(Context context, AlarmManagerInterface alarmManager, 
      int batchSize, long currentMillis) 

を持っているAlarmSchedulerという名前のクラスがある見ることができるように

あなたはthaのAndroid Calendar project

のアラームセクションを見てみることができますスケジュールされる。

queryUpcomingEvents() 

コンテンツプロバイダ(Calendar provider)上で動作し、今後のイベントを取得する:あなたはメソッドが別のメソッドを呼び出すことがわかります、特定の実装では

新しいアラームをトリガするたびに、新しいアラームを再スケジュールしたり、コンテンツプロバイダ(またはスケジュール情報を保存する場所)を調べたり、さまざまなスケジュールポリシーを適用したりすることができます。たとえば、カレンダーの予定の新しい予定者をユーザーが作成した場合は、アラームのスケジュールを変更する必要があります(たとえば、今日のすべてのアラームまたは次のアラームのみをスケジュールすることができます)。私は通常(アラーム火災トリガされBroadcastReceiveronReceive()内側)以下のコードを使用し私のアプリケーションでは

private void restartScheduler(Context context){ 
     Intent t = new Intent("it.gvillani.socialapp.alerts.SCHEDULE_REQUEST"); 
     context.sendBroadcast(t); 
    } 

をそしてもちろん、私は、そのアクションを待っBroadcastReceiverを持っており、

public class SchedulerReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context c, Intent intent) { 
     if (intent.getAction().equals("it.gvillani.socialapp.alerts.SCHEDULE_REQUEST")) { 
      startScheduler(c); 
     } 
    } 

    private void startScheduler(Context c) { 
     AlarmScheduler.clearAlarms(c); 
     AlarmScheduler.scheduleNextAlarm(c); 
    } 
} 
関連する問題