You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android 12系统中MediaRecorder仅录制9秒通话的问题求助

Android 12系统中MediaRecorder仅录制9秒通话的问题求助

各位大佬好,我开发了一个通话录制应用,在Android 11及以下系统都能正常录制完整通话,但在Android 12上每次只能录大概9秒就停了,实在找不到原因,想请教下大家有没有遇到过类似问题?

我的应用情况

  • 通过PhoneCallReceiver广播接收器监听通话状态,来电接通后启动录制,通话结束时停止录制
  • 已成功申请并授予以下权限:
    • POST_NOTIFICATIONS
    • RECORD_AUDIO
    • READ_CALL_LOG
    • READ_PHONE_STATE
    • READ_EXTERNAL_STORAGE
    • WRITE_EXTERNAL_STORAGE

核心代码片段

广播接收器类

class PhoneCallReceiver  : BroadcastReceiver() {

private lateinit var notificationManager: NotificationManager

var prevState: String = TelephonyManager.EXTRA_STATE_IDLE

private  var mediaRecorder: MediaRecorder? = null

private lateinit var filePath : String

override fun onReceive(context: Context?, intent: Intent?) {

notificationManager = context!!.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

val bundle = intent?.extras ?: return

val state = bundle.getString(TelephonyManager.EXTRA_STATE)

if(state == TelephonyManager.EXTRA_STATE_IDLE && prevState == TelephonyManager.EXTRA_STATE_IDLE){

Toast.makeText(context,"Call Ended",Toast.LENGTH_LONG).show()

stopRecording(context)

prevState = state!!

} else if (state == TelephonyManager.EXTRA_STATE_RINGING){

Toast.makeText(context,"Phone Ringing",Toast.LENGTH_LONG).show()

} else if(state == TelephonyManager.EXTRA_STATE_OFFHOOK){

startRecording(context)

Toast.makeText(context,"Call Answered",Toast.LENGTH_LONG).show()

}

}

private fun startRecording(context: Context){

var recordingPath = "xxxxxxxx"

showNotification(context = context,"Recording ...","Recording started ...")

mediaRecorder = if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.S){

MediaRecorder(context)

} else {

MediaRecorder()

}

val file = File(Environment.getExternalStorageDirectory().toString() + "/RecordingFolder")

if(!file.exists()){

file.mkdir()

}

mediaRecorder!!.setAudioSource(AudioSource.MIC)

val choice = Extras.getPrefs(context)

mediaRecorder!!.setOutputFormat(choice)

mediaRecorder!!.setAudioEncoder(AudioEncoder.AMR_NB)

mediaRecorder!!.setOutputFile(recordingPath)

try {

mediaRecorder!!.prepare()

mediaRecorder!!.start()

} catch (ex : Exception) {

Log.d("TAG","Exception Caught")

}

}

private fun stopRecording(context: Context){

notificationManager.cancel(1)

showNotification(context = context,"Recording Ended","Recording was successful")

if(mediaRecorder != null){

mediaRecorder!!.stop()

mediaRecorder!!.release()

mediaRecorder = null

}

}

private fun showNotification(context: Context,contentTitle : String , contentText : String){

val notificationCompat = NotificationCompat.Builder(context, Extras.NOTIFICATION_ID)

.setContentTitle(contentTitle)

.setContentText(contentText)

.setSmallIcon(R.drawable.ic_baseline_circle_notifications_24)

.build()

NotificationManagerCompat.from(context).notify(1,notificationCompat)

}

}

已申请的权限配置

<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

我做过的排查

  • 确认存储路径正常,录制的文件能生成,但时长固定在9秒左右
  • 检查过权限状态,所有权限都已正常授予,没有权限被拒绝的日志
  • Android 11及以下设备测试完全正常,问题仅出现在Android 12系统

有没有大佬能指点下可能的原因,或者需要调整哪些地方才能让Android 12上也能正常录制完整通话?谢谢大家!

备注:内容来源于stack exchange,提问作者Taki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 07:13:04