我正在做一个紧急应用程序。在其中用户可以点击呼叫按钮,在紧急情况下。我已经使用了核心电话获取呼叫事件所描述的苹果和AVFoundation
框架记录呼叫音频。下面是我的代码:
override func viewDidLoad() {
super.viewDidLoad()
self.setupCallRecorder()
}
func callConnected() {
print("callConnected")
self.audioRecorder?.record()
}
func callDisconnected() {
print("callDisconnected")
self.audioRecorder?.stop()
}
func setupCallRecorder() {
let audioSession:AVAudioSession = AVAudioSession.sharedInstance()
//ask for permission
if (audioSession.respondsToSelector("requestRecordPermission:")) {
AVAudioSession.sharedInstance().requestRecordPermission({(granted: Bool)-> Void in
if granted {
print("granted")
//set category and activate recorder session
try! audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord)
try! audioSession.setActive(true)
//get documnets directory
let documentsDirectory = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0]
let soundFilePath = NSString(format: "%@/sound.caf", documentsDirectory)
let soundFileURL = NSURL.fileURLWithPath(soundFilePath as String)
//create AnyObject of settings
let settings: [String : AnyObject] = [
AVFormatIDKey:Int(kAudioFormatAppleIMA4), //Int required in Swift2
AVSampleRateKey:44100.0,
AVNumberOfChannelsKey:2,
AVEncoderBitRateKey:12800,
AVLinearPCMBitDepthKey:16,
AVEncoderAudioQualityKey:AVAudioQuality.Max.rawValue
]
//record
try! self.audioRecorder = AVAudioRecorder(URL: soundFileURL, settings: settings)
} else{
print("not granted")
}
})
}
let callCenter = CTCallCenter();
callCenter.callEventHandler = { (call:CTCall!) in
switch call.callState {
case CTCallStateConnected:
print("CTCallStateConnected")
self.callConnected()
case CTCallStateDisconnected:
print("CTCallStateDisconnected")
self.callDisconnected()
default:
//Not concerned with CTCallStateDialing or CTCallStateIncoming
break
}
}
}
但当呼叫(iOS默认呼叫功能)从应用程序启动时,我的应用程序会进入后台,呼叫事件处理程序块不会被调用。我在某个地方读到,呼叫/音频录制只会在您的应用程序处于前台时工作,所以我也尝试过在呼叫启动后将我的应用程序置于前台,但即使这样也不工作。现在我有以下问题/担忧:
1.这是苹果不允许我们做的事情吗?
1.应用程序只能记录VOIP/SIP呼叫,而不能记录默认呼叫?
1.在iOS中不使用任何服务器技巧就可以记录通话吗?
注意:这个应用程序不是为越狱设备,我希望我的应用程序上传到应用程序商店。
1条答案
按热度按时间iqjalb3h1#
1.这是很多国家不允许的,苹果根本不允许,甚至没有任何私有的API来做这件事
1.应用程序可以记录他们自己的东西,只要他们通知用户。Hive网络是完全不同的东西
1.不。即使有越狱,你也必须将代码注入iOS音频堆栈的较低级别部分,并处理通过系统的原始音频流。
因此,你不可能把这样的东西放进AppStore。