检测插入& Xamarin.iOS(iOS 7)中耳机插孔上未插入的事件

时间:2013-10-31 18:13:49

标签: ios xamarin.ios ios7 xamarin headphones

我正试图找到一种方法来检测Xamarin.iOS中耳机插孔上的插入/拔出事件,特别是在最新版本(iOS 7)上。我找到了为早期版本提供解决方案的帖子,但这似乎不适用于iOS 7.有没有办法在这个版本中做到这一点?如果是,我该如何实现该功能呢?

2 个答案:

答案 0 :(得分:2)

这样的事情:

using System.Runtime.InteropServices;
using MonoTouch.AudioToolbox;

...

public override void ViewDidLoad ()
{
    base.ViewDidLoad ();
    AudioSession.AddListener(AudioSessionProperty.AudioRouteChange, EventHandler);  
}

void EventHandler(AudioSessionProperty prop, int size, IntPtr data)
{
    var isHeadphonesAvailable = IsHeadphonesAvailable (prop, size, data);
    if (isHeadphonesAvailable) {
        // Do something
    } else {
        // Do something else
    }
}

bool IsHeadphonesAvailable(AudioSessionProperty prop, int size, IntPtr data)
{
    var result = false;
    if (prop == AudioSessionProperty.AudioRouteChange) {
    var text = Marshal.PtrToStringAuto (data, size);
    result = (text.Contains ("Head"));
    }
    return result;
}

没有在真实设备上试试。只需转换其中一个Objective-C摘要。

答案 1 :(得分:1)

    using System.Runtime.InteropServices;
    using MonoTouch.AudioToolbox;

    public override void ViewDidLoad()
    {
      base.ViewDidLoad();
      .
      .
      .
      AudioSession.Initialize(null, NSRunLoop.NSDefaultRunLoopMode);
      AudioSession.AudioRouteChanged += AudioSession_AudioRouteChanged;
    }

    void AudioSession_AudioRouteChanged (object sender, AudioSessionRouteChangeEventArgs e)
    {
            if (e.CurrentOutputRoutes [0] == AudioSessionOutputRouteKind.Headphones) 
            {
                    //Code when is plugged
            }
            else
            {
                    //Code when is unplugged                        
            }
    }