Я неоднократно пытался добавить функции, которые могли бы позволить пользователям отключать будильник Android, который объявляет текущее время с помощью механизма преобразования текста в речь Android в течение десяти минут, но отменить это не удалось.
Будильник вибрирует один раз, а затем непрерывно сообщает текущее время в течение десяти минут. Теперь я хочу добавить кнопку остановки, которую можно использовать для отмены будильника при нажатии, но все мои попытки не увенчались успехом. Ниже мой код
Я неоднократно пытался добавить функции, которые могли бы позволить пользователям отключать будильник Android, который объявляет текущее время с помощью механизма преобразования текста в речь Android в течение десяти минут, но отменить это не удалось. Будильник вибрирует один раз, а затем непрерывно сообщает текущее время в течение десяти минут. Теперь я хочу добавить кнопку остановки, которую можно использовать для отмены будильника при нажатии, но все мои попытки не увенчались успехом. Ниже мой код [code]public class AlarmReceiver extends BroadcastReceiver { private TextToSpeech textToSpeech; private Handler handler; private PendingIntent pendingIntent; private Context appContext; private final int totalDuration = 10 * 60 * 1000; // 10 minutes private long startTime; private boolean isAlarmStopped = false; // Alarm stopped flag
// Check if the alarm should be stopped if (intent.getBooleanExtra("STOP_ALARM", false)) { stopAnnouncements(); return; // Immediately exit to prevent further execution }
if (isAlarmStopped) { Log.d("AlarmReceiver", "Alarm already stopped."); return; }
// Vibrate the device Vibrator vibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); if (vibrator != null) { vibrator.vibrate(2000); // Vibrate for 2 seconds }
// Initialize Text-to-Speech only once if (textToSpeech == null) { textToSpeech = new TextToSpeech(context, status -> { if (status == TextToSpeech.SUCCESS) { textToSpeech.setLanguage(Locale.getDefault()); startTime = System.currentTimeMillis(); startAnnouncingTime(); } }); } else { startAnnouncingTime(); } }
private void startAnnouncingTime() { handler = new Handler(Looper.getMainLooper()); Runnable timeAnnouncer = new Runnable() { @Override public void run() { // Check if the alarm was stopped if (isAlarmStopped) { Log.d("AlarmReceiver", "Stopping announcements due to stop flag."); return; // Exit without rescheduling }
// Announce current time Calendar calendar = Calendar.getInstance(); String timeText = String.format(Locale.getDefault(), "The current time is %d:%02d", calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE));
if (textToSpeech != null && !isAlarmStopped) { String utteranceId = "TTS_Alarm"; // Use a unique identifier for announcements textToSpeech.speak(timeText, TextToSpeech.QUEUE_FLUSH, null, utteranceId); }
// Reschedule if not stopped if (!isAlarmStopped) { handler.postDelayed(this, 5000); // Reschedule after 5 seconds } } };