Текущий код, который вы опубликовали, выглядит так, что вы фактически запрашиваете использование потока STREAM_MUSIC, а не обнаруживаете его. Я считаю, что у вас может быть два варианта для этого.
Я не пробовал этот метод, но он звучит как AudioManager.isMusicActive() может вам помочь.
На этой странице написано
Проверяет, активна ли какая-либо музыка.
Возвращает true, если какие-либо музыкальные треки активны.
Другой вариант — использовать AudioManager.OnAudioFocusChangeListener. Вы должны сначала создать этот прослушиватель, а затем зарегистрировать его для обнаружения изменений. Это означает, что ваше приложение должно работать в фоновом режиме, прежде чем другое приложение начнет использовать поток.
Создайте прослушиватель (примеры из http://developer.android.com/training/managing-audio/audio-focus.html)
OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
if (focusChange == AUDIOFOCUS_LOSS_TRANSIENT) {
// another app took the stream temporarily
} else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
// another app let go of the stream
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
// another app took full control of the stream
}
}
};
Теперь вы можете зарегистрировать слушателя и обнаружить изменения
int result = am.requestAudioFocus(afChangeListener,
// Use the music stream.
AudioManager.STREAM_MUSIC,
// Request permanent focus.
AudioManager.AUDIOFOCUS_GAIN);
if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
// You successfully took control of the stream and can detect any future changes
}
Это не очень элегантное решение, так как вы, скорее всего, заберете музыкальный поток из других приложений. Это зависит от вашего варианта использования, но может быть отправной точкой.
person
Kirk
schedule
18.09.2013