2014-03-07 41 views
2

在我的iOS應用程序中,我想顯示一個Alert,如果是Mic is not available in the device如何檢測設備中的麥克風是否可用(iPhone/iPad) - 目標C

我該如何檢查?

我曾嘗試這 -

-(void)checkMic 
{ 
    UInt32 sessionCategory = kAudioSessionCategory_RecordAudio; 
    OSStatus status = AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, sizeof (sessionCategory), &sessionCategory); //..always seems to return OK.. 
    status = AudioSessionSetActive (true); 
    if(status) 
    { 
     //mic is not available 
    } 
    } 

但該代碼表示​​與消息的錯誤 - 棄用。

+0

試試這個 http://stackoverflow.com/questions/2282871/how-can-i -chec k-if-a-microphone-is-into-the-iphone –

回答

11

AudioSessionSetPropertyAudioSessionGetProperty從iOS 7開始已棄用。請改爲使用AVAudioSession

您可以使用它availableInputs財產得到一個什麼樣的可用列表,並遍歷它們找到一個看起來像一個麥克風,就像這樣:

NSArray *availableInputs = [[AVAudioSession sharedInstance] availableInputs]; 
BOOL micPresent = false; 
for (AVAudioSessionPortDescription *port in availableInputs) 
{ 
    if ([port.portType isEqualToString:AVAudioSessionPortBuiltInMic] || 
     [port.portType isEqualToString:AVAudioSessionPortHeadsetMic]) 
    { 
     micPresent = true; 
    } 
} 

if (micPresent) 
{ 
    // Do something cool 
} 
else 
{ 
    // No mic present - show alert 
} 

或者,如果你只是想任何輸入都,並不在乎它是否是一個麥克風或線路輸入,你可以做:

if ([[AVAudioSession sharedInstance] inputAvailable]; 
{ 
    // Do something cool 
} 
else 
{ 
    // No input present - show alert 
} 
+0

僅供參考 - 'inputIsAvailable'在iOS 6.0中已棄用。改爲使用'inputAvailable'。 – rmaddy

+0

@rmaddy:你說的對。我編輯了答案以保持最新。謝謝。 –