Как определить, подключены ли наушники к iPod touch G1? - PullRequest
1 голос
/ 06 августа 2009

Есть много статей о том, как определить, подключен ли микрофон к iPod touch G2 через AudioSessionGetProperty / kAudioSessionProperty_AudioInputAvailable , но я не видел статей, связанных с обнаружением наушников подключен к iPod touch G1.

Для обзора: Аппаратное обеспечение iPod touch G2 отличается от аппаратного обеспечения iPod touch G1 в следующих отношениях:

  • iPod touch G2 имеет встроенный динамик
  • iPod touch G2 может использовать микрофон от порта наушников

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

Мои первоначальные испытания показывают, что API-интерфейсы AudioSession (и, в частности, AudioSessionGetProperty с константой kAudioSessionProperty_AudioRoute ) всегда выдают «Headphone», даже если наушники не подключены к iPod touch G1 .

Я что-то упустил? У меня есть что-то перекрестное с моими вызовами AudioSession? Если кто-нибудь пробовал это на iPod touch G1 и получил другой результат? Есть ли другой способ прорубить AudioSession API и получить то, что мне нужно?

Это все против iPhone OS 3.0 и iPhone OS 3.0 SDK на реальном оборудовании iPod touch G1.

Заранее спасибо, --Batgar

Ответы [ 5 ]

2 голосов
/ 28 марта 2012

Вы можете легко получить с помощью этого метода:

- (BOOL)isHeadsetPluggedIn {
UInt32 routeSize = sizeof (CFStringRef);
CFStringRef route;

OSStatus error = AudioSessionGetProperty (kAudioSessionProperty_AudioRoute,
&routeSize,
&route);

if (!error && (route != NULL) && ([route isEqual:@"HeadsetInOut"])) {
return YES;
}

return NO;
}
1 голос
/ 31 октября 2009

kAudioSessionProperty_AudioRoute всегда вернет наушники 1-го поколения, так как других маршрутов нет. Второе поколение и iphone и, прежде всего, будут поддерживать другой маршрут (динамик), когда наушники отключены, но в первом поколении есть еще один маршрут.

По крайней мере с этим документированным вызовом API, который вы используете, вы не сможете обнаружить состояние наушников Ipod 1-го поколения.

1 голос
/ 31 октября 2009

Проверьте это.

http://developer.apple.com/iphone/library/samplecode/SpeakHere/index.html#//apple_ref/doc/uid/DTS40007802

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

0 голосов
/ 02 июля 2014

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

Известные значения маршрута:

  • "Headset"
  • "наушники"
  • "Динамик"
  • "SpeakerAndMicrophone"
  • "HeadphonesAndMicrophone"
  • "HeadsetInOut"
  • "ReceiverAndMicrophone"
  • "коридор"

Надеюсь, это поможет

  - (BOOL)isHeadsetPluggedIn {
UInt32 routeSize = sizeof (CFStringRef);
CFStringRef route;

OSStatus error = AudioSessionGetProperty (kAudioSessionProperty_AudioRoute,
                                          &routeSize,
                                          &route);



if (!error && (route != NULL)) {

    NSString* routeStr = (__bridge NSString*)route;  //Convert CFStringRef to NSString
    NSRange routeRange = [routeStr rangeOfString:@"Head"];
    if (routeRange.location != NSNotFound){
         return YES;
    }

}
    return NO;
}
0 голосов
/ 01 января 2010

От SpeakHere

ошибка = AudioSessionGetProperty (kAudioSessionProperty_AudioInputAvailable, & size, & inputAvailable); if (ошибка) printf («ОШИБКА ПОЛУЧЕНИЯ ВВОДА!% d \ n», ошибка); btn_record.enabled = (inputAvailable)? ДА: НЕТ;

...