Как перестать звонить будильник в Java? - PullRequest
0 голосов
/ 04 августа 2020

Довольно новичок в студии Android, следовал руководству YouTube, чтобы запустить приложение-будильник. Кажется, что он работает хорошо, однако, когда начинает звучать будильник, и я нажимаю кнопку, чтобы выключить будильник, он не останавливает службу мелодий звонка. Я пробовал посмотреть другие вопросы о переполнении стека, но не смог найти для себя логического ответа. Я знаю, что мои намерения не вызывают остановку службы рингтонов в классе получателя. У кого-нибудь есть идея, как остановить службу мелодии звонка из основного класса активности и отправить триггер в класс приемника?

Код основной активности для включения будильника и воспроизведения мелодии звонка

public void setTimer(View v){
        //Make alarmmanager
        AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);

        Date currentTime = Calendar.getInstance().getTime();

        Calendar cal_alarm = Calendar.getInstance();
        Calendar cal_now = Calendar.getInstance();

        cal_now.setTime(currentTime);
        cal_alarm.setTime(currentTime);

        cal_alarm.set(Calendar.HOUR_OF_DAY,mHour);
        cal_alarm.set(Calendar.MINUTE,mMin);
        cal_alarm.set(Calendar.SECOND,0);

        if (cal_alarm.before(cal_now)){
            cal_alarm.add(Calendar.DATE,1);
        }
        //Add alarm to ArrayList
        Alarms.add(cal_alarm);
        showAlarm();

        Intent i = new Intent(MainActivity.this,MyBroadcastReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(MainActivity.this, 1, i, 0);
        alarmManager.set(AlarmManager.RTC_WAKEUP,cal_alarm.getTimeInMillis(), pendingIntent);

    }

    //Stop Alarm
    public void cancelAlarm(View v){

        Intent i = new Intent(getApplicationContext(), MyBroadcastReceiver.class);
        PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(), 1, i, 0);
        AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

        alarmManager.cancel(pendingIntent);
        pendingIntent.cancel();
        alarmview.setText("Alarm cancelled");
    }

Класс приемника

public void onReceive(Context context, Intent intent) {
        //Set vibration
        Vibrator vibrator = (Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE);
        vibrator.vibrate(3000);

        //Make notification for alarm
        Notification notification = new Notification.Builder(context).setContentTitle("WakeMeYup").setContentText("Wake up!").setSmallIcon(R.mipmap.ic_launcher).build();

        //Pass notification to Android system
        NotificationManager manager = (NotificationManager)context.getSystemService(Context.NOTIFICATION_SERVICE);
        notification.flags|= Notification.FLAG_AUTO_CANCEL;
        manager.notify(0, notification);

        //Play ringtone
        Uri notificati = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE);
        Ringtone r = RingtoneManager.getRingtone(context, notificati);
        r.play();

        }

    }

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 05 августа 2020

Я закончил тем, что создал класс Ringtone, который получает int, который решает, должен ли он воспроизводить или останавливать будильник. Слушатели onclick помещают дополнительное сообщение в намерение, которое улавливается классом мелодии звонка и читает их, чтобы знать, какой бит кода нужно запустить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...