Пользовательское действие iOS для увеличения / уменьшения громкости от наушников - PullRequest
0 голосов
/ 17 ноября 2018

Требование: когда пользователь подключает наушники к iPhone через проводную / беспроводную сеть, используя клавиши увеличения / уменьшения громкости, пользователь может выполнять пользовательские действия с помощью этих кнопок.(Не нужно менять громкость системы через наушники)

Текущая реализация:

Чтобы определить, подключены ли наушники:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleRouteChange:) name:AVAudioSessionRouteChangeNotification object:[AVAudioSession sharedInstance]];

- (void)handleRouteChange:(NSNotification *)notification
{
    NSDictionary *dicUserInfo = notification.userInfo;
    uint reason  = [dicUserInfo[AVAudioSessionRouteChangeReasonKey] intValue];

    BOOL isHeadphonesConnected = NO;

    switch (reason)
    {
        case AVAudioSessionRouteChangeReasonNewDeviceAvailable:
        {
            AVAudioSession *session = [AVAudioSession sharedInstance];
            for (AVAudioSessionPortDescription *output in session.currentRoute.outputs)
            {
                if ([output.portType isEqualToString:AVAudioSessionPortHeadphones])
                {
                    isHeadphonesConnected = YES;
                }
            }
        }
            break;

        case AVAudioSessionRouteChangeReasonOldDeviceUnavailable:
        {
            AVAudioSessionRouteDescription *previousRoute = dicUserInfo[AVAudioSessionRouteChangePreviousRouteKey];

            for (AVAudioSessionPortDescription *output in previousRoute.outputs)
            {
                if ([output.portType isEqualToString:AVAudioSessionPortHeadphones])
                {
                    isHeadphonesConnected = NO;
                }
            }
        }
            break;

        default:
            break;
    }

    if (isHeadphonesConnected)
    {
        NSLog(@"Headphones connected");
    }
    else
    {
        NSLog(@"Headphones disconnected");
    }
}

Чтобы определить, есть ли у клавиши громкостибыли нажаты из наушников:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(volumeDidChange:) name:@"AVSystemController_SystemVolumeDidChangeNotification" object:nil];

- (IBAction)volumeDidChange:(NSNotification *)notification
{
    CGFloat newVolume = [[notification.userInfo valueForKey:@"AVSystemController_AudioVolumeNotificationParameter"] floatValue];

    if (volume == 0 || newVolume < volume)
    {
        // change value
    }
    else
    {
        // change value
    }

    volume = newVolume;
}

Проблемы, с которыми мы сталкиваемся при текущей реализации:

Мы сталкиваемся с проблемой, что всякий раз, когда пользователь нажимает кнопку громкости в наушниках, мы можем запустить метод volumeDidChange,но он также изменяет системную громкость и отображает громкость HUD-оповещения, которую нам не нужно менять.Громкость системы должна быть постоянной.

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

Ответы на языке Swift будутТакже следует ценить.

1 Ответ

0 голосов
/ 18 ноября 2018

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

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