private fun getRecorder(absoluteOutFilePath: String, audioSource: Int): MediaRecorder {
val mediaRecorder = MediaRecorder()
mediaRecorder.setAudioSource(audioSource)
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC)
mediaRecorder.setAudioEncodingBitRate(64000)
mediaRecorder.setAudioSamplingRate(16000)
audioManager.mode = AudioManager.MODE_IN_CALL
audioManager.setStreamVolume(AudioManager.STREAM_VOICE_CALL, audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL), 0)
mediaRecorder.setOutputFile(absoluteOutFilePath)
mediaRecorder.prepare()
mediaRecorder.start()
return mediaRecorder
}
所以我尝试记录对话
val mediaRecorder = try {
getRecorder(absoluteOutFilePath, MediaRecorder.AudioSource.VOICE_CALL)
}catch (e:Exception){
Log.w("Can't start record with AS VOICE_CALL, try set AS MIC")
getRecorder(absoluteOutFilePath, MediaRecorder.AudioSource.MIC)
}
一切正常,异常不会下降。但是,当我用 SGS8 录制时,它被使用了MIC,因为。当VOICE_CALL抛出异常时:java.lang.RuntimeException: start failed。
我发现三星设备上的通话录音似乎不适用于所有国家/地区。同时,PlayGoogle 中有各种应用程序(例如,这个)可以完美地记录这台设备上的对话。解释如何在此设备和类似设备上正确记录通话,如何绕过此限制?
恐怕行不通。
Android 9 Pie 完全禁用通话录音
最新的Android 9.0 Pie操作系统完全屏蔽电话通话录音,除非手机越狱获取root权限。移动开发者社区 XDA Developers 的用户注意到了这一点。
此前,谷歌已经尝试过处理电话交谈的录音,而且由来已久。早在 2015 年发布 Android Marshmallow 操作系统时,Google 就取消了官方的通话录音 API,让第三方开发者想出自己的方法来做到这一点。开发人员应对了,替代解决方案在某些方面变得更好。
现在,BoldBeast 著名的 ACR 录音应用程序和 Call Recorder 的开发者已经确认,谷歌已经关闭了他们用来录音的变通方法,只留下了用于根智能手机的方法。当然,您可以获得 root 权限,但并非每个智能手机用户都会这样做。
来源:https ://www.ferra.ru/news/apps/android-pie-block-call-recording-apps-15-08-2018.htm