iOS 如何監聽出插入耳機 拔掉耳機事件?

來源:互聯網
上載者:User
首先匯入系統類別庫  

#import<AVFoundation/AVFoundation.h>

   //監聽耳機事件

    [[AVAudioSessionsharedInstance] setDelegate:self];

    

   // Use this code instead to allow the app sound to continue to play when the screen is locked.

    [[AVAudioSessionsharedInstance]setCategory:AVAudioSessionCategoryPlayback error:nil];

    

   // Registers the audio route change listener callback function

   AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange,audioRouteChangeListenerCallback,self);

把這段代碼 寫到 你需要監聽的地方 

我個人推薦放到

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOption

因為是全域嘛 哪裡都可以響應到 

例如 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

   self.window = [[[UIWindowalloc] initWithFrame:[[UIScreenmainScreen] bounds]]autorelease];

   //登陸VC

   LoginViewController *loginVC = [[LoginViewControlleralloc]init];

   UINavigationController *navNV = [[UINavigationControlleralloc]initWithRootViewController:loginVC
];

    [navNVsetNavigationBarHidden:YES];

    [loginVC release];

    

   //監聽耳機事件

    [[AVAudioSessionsharedInstance] setDelegate:self];

    

   // Use this code instead to allow the app sound to continue to play when the screen is locked.

    [[AVAudioSessionsharedInstance]setCategory:AVAudioSessionCategoryPlayback error:nil];

    

   // Registers the audio route change listener callback function

   AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange,audioRouteChangeListenerCallback,self);

    

   self.window.rootViewController = navNV;

    [navNV release];

   self.window.backgroundColor = [UIColorwhiteColor];

    [self.windowmakeKeyAndVisible];

   return YES;

}

//觸發的監聽事件 

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

            

            DLog(@"沒有耳機!");

            

        } else if (routeChangeReason == kAudioSessionRouteChangeReason_NewDeviceAvailable) {

           //Handle Headset plugged in

            DLog(@"有耳機!");

        }

        

    }

}

OK  搞定!

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.