Sim*_*lGy 6 iphone permissions uikit ios
我已经构建了一个计时器应用程序,我遇到的一个问题是当它背景时,如果用户关闭音量,我无法响铃.关闭音量或声音也会使通知静音,这是我用于在后台响铃的方法.
我刚买了一块瓷砖,发现它可以在静音时给你的手机打电话.我已经测试了它,它可以在iOS 9中运行,但我不确定如何复制这种行为.
iPhone如何在静音模式下响铃?后台刷新?动议和活动?别的什么?
现有技术:
首先,为了在后台播放声音,您的应用程序必须能够在后台启动响应回调事件的相关代码.只有特定的应用程序类型都可以作为表示对回调响应事件的背景这里.例如,"Tile"应用程序可以在后台播放声音,响应与应用程序处于后台时触发的BLE相关的回调事件(例如,BLE外围连接和断开连接).相反,当应用程序进入后台时,暂停一个简单的计时器,因此不会触发计时器到期回调,并且在这种情况下无法启动任何代码来播放声音.(你可以在这里阅读一些细节和在iOS中构建闹钟的可能方法)
如果您的应用程序类型位于特殊背景模式应用程序集中,则即使手机处于静音模式,也可以使用AVAudioPlayer播放响应背景事件的声音.在视图控制器中导入AVFoundation框架:
import AVFoundation
Run Code Online (Sandbox Code Playgroud)
而不是声明一个AVAudioPlayer变量
var player: AVAudioPlayer?;
Run Code Online (Sandbox Code Playgroud)
为了播放应用程序包中的mp3文件:
func playSound() {
guard let url = Bundle.main.url(forResource: "MY_MP3_FILE", withExtension: "mp3") else {
print("error");
return;
}
do {
try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, with: AVAudioSessionCategoryOptions.mixWithOthers);
player = try AVAudioPlayer(contentsOf: url);
guard let player = player else {
print("error");
return;
}
player.play();
} catch let error {
print(error.localizedDescription);
}
}
Run Code Online (Sandbox Code Playgroud)
重要提示:在" 功能 "选项卡的Xcode中,您还必须在" 背景模式 "部分中启用" 音频,AirPlay和画中画 "功能.
(在iOS 11和12中使用不同iPhone型号测试的Swift 4解决方案).
警告:按照此方法,声音将以手机中设置的当前音量播放,因此如果音量等于零,则不会播放声音.您可以通过以下方式以编程方式将音量声音强制为给定值:
let volumeView = MPVolumeView();
if let view = volumeView.subviews.first as? UISlider{
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 0.01) {
view.value = 0.5; //Set the volume level between 0 and 1
}
}
Run Code Online (Sandbox Code Playgroud)
但是,考虑到这种方法显示系统音量条,它可能会导致糟糕的用户体验.
| 归档时间: |
|
| 查看次数: |
1035 次 |
| 最近记录: |