单触式遥控事件无法正常工作

时间:2012-09-08 04:24:21

标签: ios events xamarin.ios controls

我想知道是否有一个单触针工作样本,它显示了接收远程控制事件的工作示例,例如来自耳机按钮的事件。

我已经实现了一个单一的iphone应用程序,实现了CanBecomeFirstResponder,名为BecomeFirstResponder,还有UIApplication.SharedApplication.BeginReceivingRemoteControlEvents(),但我没有得到任何事件。

这是我的SingleViewController的代码。

public partial class SingleViewViewController : UIViewController
{
    public SingleViewViewController () : base ("SingleViewViewController", null)
    {
    }

    public override void DidReceiveMemoryWarning ()
    {
        // Releases the view if it doesn't have a superview.
        base.DidReceiveMemoryWarning ();

        // Release any cached data, images, etc that aren't in use.
    }

    public override void ViewDidLoad ()
    {
        base.ViewDidLoad ();

        // Perform any additional setup after loading the view, typically from a nib.
        AVAudioSession audioSession = AVAudioSession.SharedInstance();
        NSError error;
        audioSession.SetCategory(AVAudioSession.CategoryPlayback, out   error);
        audioSession.SetActive(true,out error);

        this.BecomeFirstResponder();
        UIApplication.SharedApplication.BeginReceivingRemoteControlEvents();
    }

    public override void ViewDidUnload ()
    {
        base.ViewDidUnload ();

        // Clear any references to subviews of the main view in order to
        // allow the Garbage Collector to collect them sooner.
        //
        // e.g. myOutlet.Dispose (); myOutlet = null;

        ReleaseDesignerOutlets ();
    }

    public override bool ShouldAutorotateToInterfaceOrientation (UIInterfaceOrientation toInterfaceOrientation)
    {
        // Return true for supported orientations
        return (toInterfaceOrientation != UIInterfaceOrientation.PortraitUpsideDown);
    }

    public override bool CanBecomeFirstResponder {
        get {
            return true;
        }
    }
    public override bool CanResignFirstResponder {
        get {
            return false;
        }
    }

    public override void RemoteControlReceived (UIEvent theEvent)
    {
        base.RemoteControlReceived (theEvent);
    }
}

1 个答案:

答案 0 :(得分:1)

我花了一点时间在这上面,我想我可能会找到你的答案。我的第一个错误假设是遥控器(耳机)上的音量增大和减小控制将注册,但他们没有。

除非通过反复试验,否则我无法确认以下内容,但您似乎需要让AVAudioPlayer播放某些内容,或者至少在启动AVAudioSession时播放内容。如果不播放内容,播放/停止事件将传递给处理它的音乐应用。

在你的代码中,在调用base之后的ViewDidLoad方法中,我添加了

AVAudioPlayer player = new AVAudioPlayer(new NSUrl("Music/test.m4a", false), null);
player.PrepareToPlay();
player.Play();

如果您在GitHub上查看这些示例的第27章,您将看到一个播放音频并处理遥控事件的示例。

https://github.com/mattneub/Programming-iOS-Book-Examples

我无法在没有播放器播放的情况下使远程控制事件正常工作,您的示例匹配了大量的Obj-C示例,但我也无法在Xcode中使用它。

希望这有帮助。