ユーザーが自分の位置を記録するアラームを追加できるAndroidアプリケーションがあります。たとえば、毎日午前8時に自分のいる場所を記録したいと思います。アラームを受信すると、ユーザーの位置を取得してデータベースに保存するサービスを開始します。この機能は、アプリが(バックグラウンドまたはフォアグラウンドで)実行されているときに正常に機能します。
問題は、タスクマネージャーにアクセスしてアプリを強制的に閉じても、アラームが鳴らないように見えることです。ユーザーが電話を再起動してアプリを強制終了する可能性があるため、これは重要です。
アラームを設定する方法は次のとおりです。
private void setNewAlarm(int hour, int minute, int id) {
Intent alarmIntent = new Intent(AutoLoggerActivity.this, AlarmReciever.class);
alarmIntent.putExtra(Constants.ALARMID_FIELD_NAME, id);
PendingIntent sender = PendingIntent.getBroadcast(AutoLoggerActivity.this, id, alarmIntent, 0);
Calendar alarmCal = Calendar.getInstance();
alarmCal.set(Calendar.HOUR_OF_DAY, hour); // set user selection
alarmCal.set(Calendar.MINUTE, minute); // set user selection
alarmCal.set(Calendar.SECOND, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, alarmCal.getTimeInMillis(), 120000, sender);
}
BroadcastReceiverは次のとおりです。
public class AlarmReciever extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Bundle bundle = intent.getExtras();
int alarmId = bundle.getInt(Constants.ALARMID_FIELD_NAME);
Toast.makeText(context, "Alarm Running: ID = " + alarmId, Toast.LENGTH_LONG).show();
Log.d(TAG, "AlarmReceiver: onRecieve. ID = " + alarmId);
Intent serviceIntent = new Intent(context, LocationRecordingService.class);
serviceIntent.putExtra(Constants.ALARMID_FIELD_NAME, alarmId);
context.startService(serviceIntent);
}
}
なぜこれが起こっているのか考えていますか?