Как обрабатывать уведомления о тревоге в Android? - PullRequest
4 голосов
/ 26 апреля 2010

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

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

Какие-нибудь идеи по этому поводу были бы чрезвычайно полезны?

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

Ответы [ 3 ]

6 голосов
/ 17 июня 2010

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

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

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

1 голос
/ 05 октября 2015

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

AudioManager

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

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);

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

1 голос
/ 26 апреля 2010

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

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

Извините!

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