【问题标题】:Swift - Play sound when near a BeaconSwift - 在信标附近播放声音
【发布时间】:2023-03-22 17:41:01
【问题描述】:

我买了一些信标并按照一些教程开始使用它们。 我现在有一个小问题,使用以下代码我可以成功更改 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()
            }
        }
    }
}

【问题讨论】:

  • 只要您的信标在附近,循环就会运行。您需要添加一些逻辑,以便在再次调用它之前等待您需要的时间。
  • 谢谢。能否提供代码示例?

标签: swift xcode6 ibeacon estimote


【解决方案1】:

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

在您的项目顶部的类下面添加一个布尔值

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 秒才能再次播放声音。

【讨论】:

    猜你喜欢
    • 2017-03-28
    • 2014-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-14
    • 2015-01-02
    相关资源
    最近更新 更多