3

我想知道是否有用于单点触控的工作示例,该示例显示了接收远程控制事件(例如来自耳机按钮的事件)的工作示例。

我已经实现了一个单视图 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);
    }
}
4

1 回答 1

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 中工作。

希望这可以帮助。

于 2013-02-10T02:11:41.983 回答