使用Swift在iOS中进行远程控制事件

Cod*_*ody 6 iphone camera headphones ios swift

试图找出如何读取Apple耳机的音量按钮以用作相机快门的触发器(如Apple Camera应用程序那样).

从文档的远程控制活动, 遥控器接收到的事件,并且这个混帐回购协议,我拼凑起来,我可能会需要一个AVAudioPlayer对象,.beginReceivingRemoteControlEvents()以及remoteControlReceivedWithEvent与制造这种观点一起canBecomeFirstResponder() return true.

import UIKit
import AVFoundation

class ViewController: UIViewController, AVAudioPlayerDelegate {
    var player: AVAudioPlayer!
    override func viewDidLoad() {
        super.viewDidLoad()

        var session: AVAudioSession = AVAudioSession.sharedInstance()
        session.setActive(true, error: nil)
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        println("viewDidAppear worked...")
        self.becomeFirstResponder()
        UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
    }

    override func canBecomeFirstResponder() -> Bool {
        return true
    }

    override func remoteControlReceivedWithEvent(event: UIEvent) {
        let rc = event.subtype
        println("does this work? \(rc.rawValue)")
        //takePicture()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }
}
Run Code Online (Sandbox Code Playgroud)

我打算"does this work"在按下耳机上的音量按钮时,我只是看到它正常调整耳机音量.所以我必须遗漏一些东西,也许还有一个delegate或者AVSession

Cod*_*ody 5

我将其交叉发布在r / swift上,有人告诉我它可能需要播放音频(直接从文档中引用)。

因此,尽管这不是理想的解决方案,但它可以供我自己私人使用。

import UIKit
import AVFoundation
import MediaPlayer

class ViewController: UIViewController, AVAudioPlayerDelegate {
    var testPlayer: AVAudioPlayer? = nil

    func loadSound(filename: NSString) -> AVAudioPlayer {
        let url = NSBundle.mainBundle().URLForResource(filename as String, withExtension: "caf")
        var error: NSError? = nil
        let player = AVAudioPlayer(contentsOfURL: url, error: &error)
        if error != nil {
            println("Error loading \(url): \(error?.localizedDescription)")
        } else {
            player.prepareToPlay()
        }
        return player
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        self.testPlayer = self.loadSound("silence")
        self.testPlayer?.numberOfLoops = -1
        self.testPlayer?.play()
    }

    override func canBecomeFirstResponder() -> Bool {
        return true
    }

    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        self.becomeFirstResponder()
        UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
    }

    override func remoteControlReceivedWithEvent(event: UIEvent) {
        let rc = event.subtype
        println("rc.rawValue: \(rc.rawValue)")
        // take photo
    }
}
Run Code Online (Sandbox Code Playgroud)

我注意到,在Apple的摄像头应用程序中,+ /-音量按钮会触发摄像头,而麦克风按钮会暂停/播放在其他应用程序中运行的所有音频,但是在此实现中,音量按钮仍会控制音量(并且所有音频都已暂停应用启动时)。

一个rc.rawValue: 103对应于麦克风按钮,双击返回一个单一的点击104,和三击回报105,然后有时撞到一对夫妇在一时间返回108109