Подтвердить что ты не робот

Проверьте, не находится ли iPad в бесшумном режиме

Возможный дубликат:
Обнаружить бесшумный режим в iOS5?

Я использовал приведенный ниже код, чтобы проверить, включен ли режим молчания, он работает так, как ожидалось на iPhone, но на iPad он воспроизводит независимо.

CFStringRef state;
UInt32 propertySize = sizeof(CFStringRef);
AudioSessionInitialize(NULL, NULL, NULL, NULL);
AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);

if (CFStringGetLength(state) == 0) { 

    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Silent mode" 
                                                    message:@"Please turn sound on"
                                                   delegate:self cancelButtonTitle:@"Ok" 
                                          otherButtonTitles:nil];
    [alert show];
    [alert release];
}

Любые идеи, как изменить его для работы повсеместно?

Спасибо

Dan.

4b9b3361

Ответ 1

В вашем XIB вы можете добавить слайдер, чтобы проверить, на каком уровне громкости, так что в основном вы можете определить, является ли он тихим, и знать уровень громкости. Для более полного понимания этого класса, здесь ссылка http://blog.stormyprods.com/2008/09/proper-usage-of-mpvolumeview-class.html, но попробуйте это сначала:

Следующий код создаст нечто вроде панели томов.

- (void)viewDidLoad {
        // create a frame for MPVolumeView image
 CGRect frame = volumeViewHolder.bounds; // CGRectMake(0, 5, 180, 0);
 volumeView = [[[MPVolumeView alloc] initWithFrame:frame] autorelease];
 [volumeView sizeToFit];
 [volumeViewHolder addSubview:volumeView];

 for (UIView *view in [volumeView subviews]){
  if ([[[view class] description] isEqualToString:@"MPVolumeSlider"]) {
   volumeViewSlider = view;
  }
 }
 [[NSNotificationCenter defaultCenter] addObserver:self 
      selector:@selector(volumeChanged:) 
      name:@"AVSystemController_SystemVolumeDidChangeNotification" 
      object:nil];
}
- (void) volumeChanged:(NSNotification *)notify
{
[volumeViewSlider setValue:[[[notify userInfo] objectForKey:@"AVSystemController_AudioVolumeNotificationParameter"] floatValue]];
}

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

Ответ 2

Этот ответ SO отвечает на него красиво:

Обнаружение бесшумного режима в iOS5?

И что касается ответа Гейба, если его ответ действительно использует частный API, Apple отклонит ваше приложение.