10

iPod Touch / iPhoneにヘッドホンやその他のアクセサリが接続されているかどうかを検出することはできますか?

マイクが必要なアプリを作成しています。ドック接続を介して、またはAppleのインラインヘッドフォン/マイクアクセサリなどのヘッドフォンポートを使用して、「iSomething」にマイクが接続されているかどうかを確認する必要があります。

4

5 に答える 5

10

最終的にそれを見つけました - オーディオ セッション オブジェクトを初期化した後、 - AudioSessionInitialize() - AudioSessionGetProperty を呼び出し、kAudioSessionProperty_AudioInputAvailable の値を取得できます。

AudioSessionInitialize(NULL, NULL, NULL, NULL);    
UInt32 propertySize, micConnected;
    AudioSessionGetProperty(kAudioSessionProperty_AudioInputAvailable, &propertySize, &micConnected);
    [self updateMicStatus:micConnected]; // user-created method

Audio Session Services のドキュメントによると、オーディオ入力が使用可能かどうかを判断するには、デバイス モデル (iPhone と iPod Touch) を使用するのではなく、これを使用する必要があります。AudioSessionAddPropertyListener() を介して、このプロパティへの変更を監視するコールバック関数を設定することもできます。

このプロパティが Dock コネクタ経由で接続されたデバイスにも適用されるかどうかはまだわかりませんが、ヘッドフォン ジャックでは機能するようです。

于 2009-03-20T22:43:02.540 に答える
4

または、次を使用できます。

if (![[AVAudioSession sharedInstance] inputIsAvailable]) {
    // your code here for no audio input available
}
于 2010-12-28T15:36:15.870 に答える
4

IOS 6 では非推奨inputIsAvailableです。将来的には、次を使用する必要があります。inputAvailable

BOOL audioHWAvailable = audioSession.inputAvailable;
于 2012-09-24T15:28:01.470 に答える
0

これが解決策です。気に入るか、役に立つかもしれません。

以下の方法を使用する前に、この2行も書いてください

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None;
    AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);

- (void)isHeadsetPluggedIn {

    UInt32 routeSize = sizeof (CFStringRef);
    CFStringRef route;

    AudioSessionGetProperty (kAudioSessionProperty_AudioRoute,
                                              &routeSize,
                                              &route);

    //NSLog(@"Error >>>>>>>>>> :%@", error);
    /* Known values of route:
     * "Headset"
     * "Headphone"
     * "Speaker"
     * "SpeakerAndMicrophone"
     * "HeadphonesAndMicrophone"
     * "HeadsetInOut"
     * "ReceiverAndMicrophone"
     * "Lineout"
     */

    NSString* routeStr = (NSString*)route;

    NSRange headsetRange = [routeStr rangeOfString : @"Headset"];
    NSRange receiverRange = [routeStr rangeOfString : @"Receiver"];

    if(headsetRange.location != NSNotFound) {
        // Don't change the route if the headset is plugged in.
        NSLog(@"headphone is plugged in ");
    } 
    else if (receiverRange.location != NSNotFound) {
        // Change to play on the speaker
        NSLog(@"play on the speaker");

    } 
    else {
        NSLog(@"Unknown audio route.");

    }
}
于 2011-09-27T21:01:25.840 に答える
0

デバイスにマイクが内蔵されているかどうかを判断するには[UIDevice currentDevice].model、iPhone なのか第 2 世代の iPod Touch なのかを確認するだけです。サードパーティのマイクがドック コネクタに接続されている限り、これは現在の 2.2.1 SDK では不可能ですが、それ以降のバージョンでは可能になる可能性があります :)

于 2009-03-20T19:04:43.067 に答える