私のソリューションの編集:スピナードロップダウンリストを使用してアラームの時間を設定していましたonSelectItem
が、スピナーのメソッドが常に選択されていると見なされることを忘れていたため、そのメソッド内にアラームを配置することで、常に発生しました。OP下
私は毎日の通知システムを作ろうとしています。特定の時間に通知をプッシュするために使用AlarmManager
しています。ドキュメントによると、アラームを一度だけ発生させるメソッドを使用しています。ただし、アプリを完全に終了するまで、アラームが繰り返し発生します。
これが私の初期化のものです:
alarmMgr = (AlarmManager)MainActivity.this.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(MainActivity.this, AlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(MainActivity.this, 0, intent, 0);
alarmInfo = new AlarmManager.AlarmClockInfo(cal.getTimeInMillis(), alarmIntent);
そして私のAlarmReceiver
クラス:
import static com.example.umbrellareminder.MainActivity.location_button;
public class AlarmReceiver extends BroadcastReceiver {
private Context context;
@RequiresApi(api = Build.VERSION_CODES.O)
public void onReceive(Context context, Intent intent) {
this.context = context;
location_button.performClick();
}
}
(location_button
httpリクエストを実行して通知をプッシュするために使用するものです)
実際にアラームを鳴らすために、両方を試しました
alarmMgr.setAlarmClock(alarmInfo,alarmIntent);
と
alarmMgr.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(),alarmIntent);
ただし、どちらも繰り返し実行されます。また、時間遅延を追加してから を含めてみましたalarmIntent.cancel()
が、これによりアラームがキャンセルされますが、アラームがまったく発火する前にキャンセルされます (これは紛らわしいですが、時間遅延の後にそれが行われると考えていたでしょう)
このアラームが繰り返し発生する理由を見逃している理由はありますか?
追加情報を追加するための編集: http 要求を作成したり、通知に表示して使用する情報を取得したりするために使用されるボタンがあります。アラーム自体は、次のようにSpinner
(ドロップダウン リストはアラームのオプションの時間のリストです)内で設定されますonItemSelectedListener
。
Spinner time_list = findViewById(R.id.time_list);
time_list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
remind_time = time_list.getSelectedItem().toString();
int hour = Integer.parseInt(Character.toString(remind_time.charAt(0)));
int minute = Integer.parseInt(remind_time.substring(2,3));
Calendar cal = Calendar.getInstance();
cal.setTimeInMillis(System.currentTimeMillis());
cal.set(Calendar.HOUR_OF_DAY, 9);
cal.set(Calendar.MINUTE, 25);
cal.set(Calendar.SECOND, 45);
if(cal.getTimeInMillis() <= System.currentTimeMillis()){
cal.add(Calendar.DAY_OF_MONTH, 1);
}
Log.d("TIME",cal.getTime().toString());
alarmInfo = new AlarmManager.AlarmClockInfo(cal.getTimeInMillis(), alarmIntent);
//line where I set the alarm
alarmMgr.setRepeating(AlarmManager.RTC_WAKEUP,cal.getTimeInMillis(),AlarmManager.INTERVAL_DAY,alarmIntent);
}