Swift - 靠近信标时播放声音
Swift - Play sound when near a Beacon
我买了一些信标,并按照一些教程开始使用它们。
我现在有一个小问题,使用下面的代码我可以成功地改变我的 iPhone 的背景颜色,但是声音(一个 3 分钟的 MP3)在几秒钟后循环。
如何修改我的代码才能继续?
func locationManager(manager: CLLocationManager!, didRangeBeacons beacons: [AnyObject]!, inRegion region: CLBeaconRegion!) {
let knownBeacon = beacons.filter{ [=11=].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。
在 class
下的项目顶部添加一个 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{ [=11=].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 秒才能再次播放声音。
我买了一些信标,并按照一些教程开始使用它们。 我现在有一个小问题,使用下面的代码我可以成功地改变我的 iPhone 的背景颜色,但是声音(一个 3 分钟的 MP3)在几秒钟后循环。
如何修改我的代码才能继续?
func locationManager(manager: CLLocationManager!, didRangeBeacons beacons: [AnyObject]!, inRegion region: CLBeaconRegion!) {
let knownBeacon = beacons.filter{ [=11=].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。
在 class
下的项目顶部添加一个 boolvar beaconEnabled : Bool = true
将您的代码更改为类似这样的内容。注意 play() 函数之后的 "beaconEnabled = true" 和 NSTimer。将 300 秒更改为您需要的任何值。
func locationManager(manager: CLLocationManager!, didRangeBeacons beacons: [AnyObject]!, inRegion region: CLBeaconRegion!) {
if beaconEnabled {
let knownBeacon = beacons.filter{ [=11=].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 秒才能再次播放声音。