Изменение объема приложения iPhone без изменения громкости появилось окно - PullRequest
0 голосов
/ 14 октября 2011

Я делаю приложение дополненной реальности, в котором есть функция фотографирования.Он использует мою собственную функцию для создания UIImage для сохранения экрана.По закону в Японии камеры должны иметь шум затвора, поэтому камера iPhone всегда воспроизводит его.До сих пор я нашел способ воспроизводить звуки, даже когда iPhone отключен, но он все еще зависит от установленной пользователем громкости.Итак, я нашел способ использовать MPMusicPlayerController для управления громкостью приложения.Это работает, но при изменении громкости появляется окно, сигнализирующее об изменении громкости.

Вот мой код для воспроизведения звуков, даже когда он отключен:

    AudioSessionInitialize (NULL, NULL, NULL, NULL);
AudioSessionSetActive(true);

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, 
                         sizeof(sessionCategory),&sessionCategory);

Я использую библиотеку Finch для воспроизведения звука (легкая обертка для openAL), а затем MPMusicPlayerController для регулировки громкости доplay.

appMusicPlayer = [MPMusicPlayerController applicationMusicPlayer];
[appMusicPlayer setVolume:0.5f];

Кто-нибудь имел опыт работы с этим или сделал такие приложения для Японии?Я действительно в растерянности.Спасибо.

1 Ответ

1 голос
/ 04 мая 2012

MPVolumeView, пока он виден, заблокирует плавающее поле, даже если пользователь на самом деле его не видит.

Некоторые примеры кода ...

// create/synthesize ivars for "MPVolumeView" and "UIView" (both are necessary)
// I called them "mpVolumeView" and "mpVolumeViewParentView" respectively

// the UIView containing the MPVolumeView can have a frame of (0,0,1,1)
// this way, the user never sees the slider, but it still works normally

- (void)viewDidLoad {
    ...
    // with this, only the slider is visible
    mpVolumeViewParentView.backgroundColor = [UIColor clearColor];

    // initialize the volume slider (link the parent view in IB, or init here)
    mpVolumeView = [[MPVolumeView alloc] initWithFrame:
                                                mpVolumeViewParentView.bounds];

    // since it's a programmatic init, the subview must be added like so
    [mpVolumeViewParentView addSubview:mpVolumeView];

    // allows the floating box to appear without destroying mpVolumeView
    mpVolumeView.hidden = YES; // or [mpVolume setHidden:YES]; if you prefer
    ...
}

Перед изменением громкостизаставить камеру издавать звук ...

mpVolumeView.hidden = NO; // view visible, box doesn't appear

И после звуков, чтобы не было похоже, что вы что-то напутали ...

mpVolumeView.hidden = YES; // view hidden, box appears

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

Этот код для iOS 5.1
Я не знаю, какова совместимость со старыми версиями.

...