Главная » iPhone » Пример iPhone: какой у меня уровень громкости?

0

Данный пример аналогичен примеру "Hello, World!" из главы 3 за исключением того, что отображается уровень громкости, а не приветственное сообщение. Когда нажимается одна из кнопок регулировки уровня громкости, созданный нами наблюдатель уведомляет метод volumeChanged. который перепроверяет уровень громкости и обновляет текст.

Данный пример может быть скомпилирован с помощью приведенной далее командной строки. Вам придется подключить платформы Celestial, Core Audio и Audio Toolbox:

$ arm-apple-darwin9-gcc -о MyExample MyExample.m -lobjc ^

-framework CoreFoundation -framework Foundation -framework UIKit -framework Celestial -framework AudioToolbox -framework CoreAudio -DMAC_OS X VERSION_MAX ALLOWED=MAC_OS_X_VERSION_l0_5 Ь – DMAC_OS_X VERS ION_MIK_REQUIRED=MAC__OS_X VERS ION_ 10_5

В листингах 6.5 и 6.6 приведен соответствующий код.

………………………………………………………………………………………………. "……….. :

j Листинг 6.5. Пример управления уровнем громкости (MyExample.h)

…………………………………………………………………………………………………………………………………………………. . ………………. !…………………..                                                          „…/….П.м,………………………………………………………………………………………………………………………………………………………………………………….. …………………                                                пи,,.»                                   ‘

#import  <CoreFoundation/CoreFoundation.h>

#import  <UIKit/UIKit.h>

#import  <UIKit/UITextView.h>

#import  <Celestial/AVSystemController.h>

@interface MainView : UlView I

UITextView *textView; AVSystemController *avs;

-    (id)initWithFrame:(CGRect)frame;

-    (void)dealloc;

-    (void)displayVolume;

©end

©interface MyApp : UIApplication {

UlWindow "window; MainView *mainView;

}

-    (void)applicationDidFinishLaunching:(NSNotification *)aNotification; ©end

timport "MyExample.h" float volume;

int main(int argc, char **argv) {

NSAutoreleasePool *autoreleasePool = [ [ NSAutoreleasePool alloc ] init

] ;

int returnCode = UIApplicationMain(argc, argv, @"MyApp", @"MyApp"); [ autoreleasePool release ]; return returnCode;

}

@implementation MyApp

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { window = [ [ UlWindow alloc ] initWithContentRect:

[ UIHardware fullScreenApplicationContentRect ]

];

CGRect rect = [ UIHardware fullScreenApplicationContentRect ]; rect.origin.x = rect.origin.у = O.Of;

mainView = [ [ MainView alloc ] initWithFrame: rect ];

[ window setContentView: mainView ]; [ window orderFront: self ]; [ window makeKey: self ] ; [ window _setHidden: NO ];

}

@end

@implementation MainView – (id)initWithFrame:(CGRect)rect {

self = [ super initWithFrame: rect ]; if (nil != self) {

NSString *audioDeviceName;

avs = [ AVSystemController sharedAVSystemController ]; [ avs getActiveCategoryVolume:&_volume andName: SaudioDeviceName ];

textView = [ [ UITextView alloc ] initWithFrame: rect ]; [ self displayVolume ] ; [ self addSubview: textView ];

[ [ NSNotificationCenter defaultCenter ] addObserver: self selector:@selector(volumeChange:) name:

@"AVSystemController_SystemVolumeDidChangeNotification" object: avs ];

}

return self;

}

-    (void)displayVolume

NSString *text;

text = [ [ NSString alloc ]

initWithFormat: @"Volume is set to %f", _volume ]; [ textView setText: text ];

}

-    (void)volumeChange:(NSNotification *)notification { AVSystemController *avsc = [ notification object ]; NSString *audioDeviceName;

[ avsc getActiveCategoryVolume:&_volume andName:SaudioDeviceName ]; [ self displayVolume ];

}

-    (void)dealloc {

[ self dealloc ]; [ super dealloc ];

}

@end

Как это работает

Пример с уровнем громкости работает следующим образом:

1.        При порождении приложения создается объект MainView и вызывается его метод initwithFrame.

2.        Метод initwithFrame создает экземпляр AVSystemController И делегирует наблюдателю полномочия уведомлять метод volumeChange об изменениях системного уровня громкости.

3.     Уровень громкости один раз считывается в начале, и отображается текстовый вид.

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

5.     Метод volumeChange считывает новый системный уровень громкости и вызывает метод под названием displayvolume для обновления выводимого текста.

Для дальнейшего изучения

Проверьте наличие прототипов Audio Toolbox в папке include вашего пакета инструментов. Вы обнаружите их в папке/toolchain/sys/usr/include/AudioToolbox.

Источник: Здзиарски Дж. iPhone. Разработка приложений с открытым кодом: Пер„с англ. — 2-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2009. — 368 е.: ил.

По теме:

  • Комментарии