Swift-在灯塔附近播放声音



我买了一些信标,并根据一些教程开始使用它们。我现在有一个小问题,使用以下代码,我可以成功地更改iPhone的背景色,但声音(3分钟的MP3)在几秒钟后循环播放。

如何修改代码以继续?

func locationManager(manager: CLLocationManager!, didRangeBeacons beacons: [AnyObject]!, inRegion region: CLBeaconRegion!) {
    let knownBeacon = beacons.filter{ $0.proximity != CLProximity.Unknown }
    if knownBeacon.count > 0 {
        let nearestBeacon = knownBeacon[0] as CLBeacon
        self.view.backgroundColor = self.colors[nearestBeacon.minor.integerValue]
        if nearestBeacon.minor.integerValue == 15879 {
            audioPlayer = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: path!), fileTypeHint: "mp3", error: nil)
            if let sound = audioPlayer {
                sound.prepareToPlay()
                sound.play()
            }
        }
    }
}

只要附近有信标,循环就会运行。可能还有其他方法,但我能想到的是使用一个简单的NSTimer。

在类下面的项目顶部添加一个bool

var beaconEnabled : Bool = true

将代码更改为类似的内容。注意play()函数后面的"beaconEnabled=true"和NSTimer。把300秒改成你需要的时间。

func locationManager(manager: CLLocationManager!, didRangeBeacons beacons: [AnyObject]!, inRegion region: CLBeaconRegion!) {
    if beaconEnabled {
        let knownBeacon = beacons.filter{ $0.proximity != CLProximity.Unknown }
        if knownBeacon.count > 0 {
            let nearestBeacon = knownBeacon[0] as CLBeacon
            self.view.backgroundColor = self.colors[nearestBeacon.minor.integerValue]
            if nearestBeacon.minor.integerValue == 15879 {
                audioPlayer = AVAudioPlayer(contentsOfURL: NSURL(fileURLWithPath: path!), fileTypeHint: "mp3", error: nil)
                if let sound = audioPlayer {
                    sound.prepareToPlay()
                    sound.play()
                    beaconEnabled = false
                    NSTimer.scheduledTimerWithTimeInterval(300.0, target: self, selector: Selector("enableBeacon"), userInfo: nil, repeats: false)
                }
            }
        }
    }
}

然后添加此功能以再次启用您的信标

func enableBeacon () {
    beaconEnabled = true
}

这将等待300秒才能再次播放声音。

最新更新