0

ユーザーが通話を受信するとオーディオが一時停止し、通話が終了すると再開するはずです。

しかし、私のクラスへの参照は、以下のMyAVPlayerコード行で nil を返します。[myAVPlayer pauseAACStreaming:self];[myAVPlayer playACCStreaming:self];

nilオーディオを再生しているのに、なぜですか? それを行うより良い方法はありますか?

次のように、AppDelegate.ha にカスタム クラス MyAVPlayer への参照があります。

@class MyAVPlayer;

@interface AppDelegate : NSObject <UIApplicationDelegate> 

{

   MyAVPlayer *myAVPlayer;

} 

@property (nonatomic, retain)  MyAVPlayer *myAVPlayer;

次に、 AppDelegate.m に次のものがあります。

#import "MyAVPlayer.h"

void AudioSessionInterruptionListenerCallBack(void *inClientData, UInt32 inInterruptionState);

@implementation AppDelegate

@synthesize myAVPlayer;

void AudioSessionInterruptionListenerCallBack (void *inClientData, UInt32 inInterruptionState)
{
    NSLog(@"Audio session interruption");

    MyAVPlayer* streamer = (MyAVPlayer *)inClientData;
    [streamer handleInterruptionChangeToState:inInterruptionState];
}

- (void)applicationWillResignActive:(UIApplication *)application
{

    AudioSessionInitialize (
                            NULL,                         
                            NULL,                          
                            AudioSessionInterruptionListenerCallBack,  
                            self                       
                            );
}



- (void)applicationDidBecomeActive:(UIApplication *)application
{

    AudioSessionInitialize (
                            NULL,                         
                            NULL,                          
                            AudioSessionInterruptionListenerCallBack,  
                            self                       
                            );
}


- (void)handleInterruptionChangeToState:(AudioQueuePropertyID)inInterruptionState 
{

     NSLog(@"handleInterruptionChangeToState");

    if (inInterruptionState == kAudioSessionBeginInterruption)
    { 
        [myAVPlayer pauseAACStreaming:self];  
    }

    else if (inInterruptionState == kAudioSessionEndInterruption) 
    {
        AudioSessionSetActive( true );

               [myAVPlayer playACCStreaming:self];      
    }
}
4

2 に答える 2

2

これは、実際にはインスタンス変数を何にも割り当てていないためです!

于 2012-03-14T15:34:16.927 に答える
1

問題は、というプロパティがあることですが、myAVPlayer次の行を使用して割り当てている変数です。

MyAVPlayer* streamer = (MyAVPlayer *)inClientData;

代わりに、次を使用する必要があります。

self.myAVPlayer = (MyAVPlayer *)inClientData;
于 2012-03-14T15:49:23.723 に答える