セットアップ2つのアラームを管理する必要があります最初の1つのトリガ時間は、適切な時間(たとえば午前8時)までの残り時間を計算することによって行います。その後、15分ごとにトリガーする最初のアラームマネージャー内に別のアラームマネージャーを作成する必要があります。
Calendar c = Calendar.getInstance();
int m = calendar.get(Calendar.MINUTE);
long start = System.currentTimeMillis();
int remain=0;
if (m<15)
{
remain = 15-m;
}
else if (m<30)
{
remain = 30-m;
}
else if (m<45)
{
remain = 45-m;
}
else
{
remain = 60-m;
}
remain=start + remain*60*1000// convert it to milisecond and plus it to current time;
編集
その後、セットアップ最初のアラーム管理するには以下のコードを使用することができます:
AlarmManager am=(AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, FirstReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);
am.set(AlarmManager.RTC_WAKEUP,remain, pi);
怒鳴るコードを使用して設定された第1のアラームマネージャのための計算時間のため
FirstReceiverクラスでは、次のようになります。
public class FirstReceiver extends BroadcastReceiver
{
//do what ever you want + code bellow to setup second alarm manager
Intent intent = new Intent(this, SecAlarm.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager am= (AlarmManager)getSystemService(Context.ALARM_SERVICE);
am.setRepeating(AlarmManager.ELAPSED_REALTIME,SystemClock.elapsedRealtime(),
15*60*60,pendingIntent);
}
あなたは1つではなく2つのアラームマネージャーを設定する必要があると思います。 – pooyan
これはAndroid 6.0以降では実用的ではありません。ユーザーがバッテリー最適化ホワイトリストにあなたのアプリを追加しない限り、Dozeモードはタイミングの正確な制御を妨げます。この種の精度はもちろんのこと、バックグラウンドで作業する必要がないように、アプリを設計することを強くお勧めします。 – CommonsWare
@CommonsWareは、コメントのおかげで、これはAndroidプラットフォームの上位バージョンでは実用的ではないことを理解しましたが、私は現在、デバイスが電源モードに依存するAndroid 2.3で動作する独自のデバイスで作業しています。トップ24×7は、そのような面倒な作業が必要ですので、そのような状況について何か提案がありますか? – XXX