このコードを使用して、iPhoneのオーディオジャックに何かが差し込まれているかどうかを確認しました
void audioRouteChangeListenerCallback (void *inUserData, AudioSessionPropertyID inPropertyID, UInt32 inPropertyValueSize, const void *inPropertyValue ) {
// ensure that this callback was invoked for a route change
if (inPropertyID != kAudioSessionProperty_AudioRouteChange) return;
{
// Determines the reason for the route change, to ensure that it is not
// because of a category change.
CFDictionaryRef routeChangeDictionary = (CFDictionaryRef)inPropertyValue;
CFNumberRef routeChangeReasonRef = (CFNumberRef)CFDictionaryGetValue (routeChangeDictionary, CFSTR (kAudioSession_AudioRouteChangeKey_Reason) );
SInt32 routeChangeReason;
CFNumberGetValue (routeChangeReasonRef, kCFNumberSInt32Type, &routeChangeReason);
if (routeChangeReason == kAudioSessionRouteChangeReason_OldDeviceUnavailable) {
//Handle Headset Unplugged
NSLog(@"PluggedOut");
}
else if (routeChangeReason == kAudioSessionRouteChangeReason_NewDeviceAvailable)
{
//Handle Headset plugged in
NSLog(@"Something Plugged In");
}
}
しかし、プラグインされたデバイスがカードリーダーであるかどうかを判断するために目的の C メソッド (他のすべてのコードで完全に機能する) を追加すると、EXC_BAD_ACCESS エラーが発生し、私が試したのは以下のコードでした
else if (routeChangeReason == kAudioSessionRouteChangeReason_NewDeviceAvailable)
{
//Handle Headset plugged in
NSLog(@"Something Plugged In");
audiotest *test;
if([test Checkheadphonestatus] == 1)
{
NSLog(@"Your iPosReader Connected");
}
else if([test Checkheadphonestatus] == 0)
{
NSLog(@"Connected device was not iPos Reader");
}
}
}
任意の提案をいただければ幸いです。