-1

このコードを使用して、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");
            }
                    }

        }

任意の提案をいただければ幸いです。

4

1 に答える 1

1
audiotest *test;

初期化していないようですtest。それを次のように置き換えてみてください:

audiotest *test = [[audiotest alloc] init];

また、補足として、クラス名を PascalCase にし、メソッド名を camelCase にするのは、Objective-C の規則です。例えば:

AudioTest *test = [[AudioTest alloc] init];
int status = [test checkHeadphoneStatus];
于 2013-05-01T08:04:31.227 に答える