Как обрабатывать уведомление о тревоге в Android?

Я разрабатываю приложение медиаплеера для Android, для которого мне нужно обрабатывать любое уведомление о тревоге, и на его основе я приостанавливаю воспроизведение. Когда будильник будет отложен или отключен, я возобновлю воспроизведение.

Я много гуглил об обработке тревог, но нашел способ включить уведомления о тревогах с помощью кода, установить намерение и затем обработать его. Тем не менее, нигде я не мог найти просто обработку части уведомления о тревоге. Мне не нужно включать будильник, он может быть установлен пользователем, и мне не нужно программно. Все, что мне нужно, это просто обработать это уведомление.

Любые идеи по этому поводу были бы чрезвычайно полезны?

Спасибо, Ашиш


person Asheesh Vashishtha    schedule 26.04.2010    source источник


Ответы (3)


Привет, Ашиш Вашиштха,

Поправьте меня в этом, но, насколько я знаю, всякий раз, когда активируется любое другое приложение, даже если это будильник, ваша деятельность обязательно переходит в фоновый режим. Итак, я думаю, вы можете переопределить функции OnPause и OnResume, чтобы поместить свой код. Что касается повтора или других вещей, все они приведут к тому, что активность будильника будет уничтожена (или приостановлена, не знаю много об этом), и ваша активность будет возобновлена. Так что это не будет для вас поводом для беспокойства!

Надеюсь это поможет...

person JaVadid    schedule 17.06.2010

Насколько я знаю, у вас нет возможности получать уведомления о том, что делает приложение «Будильник», так же, как вы не получаете уведомления о любых других сторонних будильниках.

Обратите внимание, что AlarmManager — то, о чем вы, вероятно, читали, — это не то же самое, что приложение «Будильник».

Прости!

person CommonsWare    schedule 26.04.2010
comment
Привет, CommonsWare, спасибо за ваш ответ, однако я нашел действие намерения, с помощью которого я могу получать уведомления, когда срабатывает будильник. Строка действий намерения — com.android.alarmclock.ALARM_ALERT. Это отлично работает для меня, однако теперь мне нужно обрабатывать события, генерируемые нажатием кнопок «Отложить» и «Отклонить» в будильнике. Любая помощь в этом будет полезна. Большое спасибо, Ашиш - person Asheesh Vashishtha; 27.04.2010
comment
Это действие Intent не является частью SDK — ничего, начинающееся с com.android, не является частью SDK. Не полагайтесь на это Intent. Его нельзя использовать на некоторых устройствах (тех, которые заменили стандартный будильник на пользовательское приложение). Кроме того, он может не работать в будущих версиях Android. androidguys.com/2009/12/14 /code-pollution-reaching-sdk - person CommonsWare; 27.04.2010
comment
Большое спасибо, CommonsWare. Итак, вы предлагаете, что если мы не будем использовать действие «Намерение», не будет другого способа обработки событий, генерируемых приложением «Будильник»? Кроме того, нет такого будильника, который поставляется из коробки SDK? Это что-то, что было добавлено поверх него позже? Пожалуйста, поправьте меня в этом. - person Asheesh Vashishtha; 28.04.2010
comment
Кроме того, нет такого будильника, который поставляется из коробки SDK? SDK — это программный интерфейс. Он не включает приложения, так же как Windows SDK не включает Блокнот или Сапер. - person CommonsWare; 28.04.2010

Я столкнулся с похожей ситуацией при разработке медиаплеера. Мое решение состояло в том, чтобы использовать AudioManager OnAudioFocusChangeListener.

Вы реализуете слушателя в классе так

public class VideoPlayerHelper implements AudioManager.OnAudioFocusChangeListener {

Затем вы переопределяете onAudioFocusChange

@Override
public void onAudioFocusChange(int focusChange) {
    switch (focusChange) {

        //Just fall through by omitting break
        case AudioManager.AUDIOFOCUS_LOSS:
        case AudioManager.AUDIOFOCUS_LOSS_TRANSIENT:
            LogUtil.log(LogUtil.DEBUG, TAG, "AUDIOFOCUS_LOSS or AUDIOFOCUS_LOSS_TRANSIENT"); //Custom logging class
            if (isPlaying()) {
                pause();
                mAudioManager.abandonAudioFocus(VideoPlayerHelper.this);
            }
            break;
        case AudioManager.AUDIOFOCUS_GAIN:
            LogUtil.log(LogUtil.DEBUG, TAG, "AUDIOFOCUS_GAIN"); //Custom logging class
            break;
        default:
            break;
    }
}

Ключ здесь AudioManager.AUDIOFOCUS_LOSS_TRANSIENT. Это был код, который слушатель продолжал получать, когда звонил будильник (на Note 5). Поэтому я просто обработал AudioManager.AUDIOFOCUS_LOSS_TRANSIENT так же, как AudioManager.AUDIOFOCUS_LOSS, приостановив медиаплеер и отпустив аудиофокус.

Когда мы настраиваем медиаплеер, я добавил эту строку перед добавлением источника данных.

player.setAudioStreamType(AudioManager.STREAM_MUSIC);

Убедитесь, что в вашем коде для запуска медиаплеера также есть эта строка (у меня она есть в коде запуска и коде onResume на случай, если будильник сработает, когда приложение находится в фоновом режиме).

mAudioManager.requestAudioFocus(VideoPlayerHelper.this, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);

Эта строка помогает вам вернуть фокус звука, когда вы нажимаете кнопку воспроизведения после отключения будильника.

Вы также должны отпустить звуковой фокус, когда закончите с медиаплеером. Я поместил эту строку кода в методы onStop и onDetach.

mAudioManager.abandonAudioFocus(VideoPlayerHelper.this);

Это не так много настроек, как вы думаете, и это позволяет вам настраивать медиаплеер всякий раз, когда появляется неожиданный звук (например, будильник или таймер).

person welshk91    schedule 05.10.2015