Android 12系统中MediaRecorder仅录制9秒通话的问题求助
Android 12系统中MediaRecorder仅录制9秒通话的问题求助
各位大佬好,我开发了一个通话录制应用,在Android 11及以下系统都能正常录制完整通话,但在Android 12上每次只能录大概9秒就停了,实在找不到原因,想请教下大家有没有遇到过类似问题?
我的应用情况
- 通过
PhoneCallReceiver广播接收器监听通话状态,来电接通后启动录制,通话结束时停止录制 - 已成功申请并授予以下权限:
POST_NOTIFICATIONSRECORD_AUDIOREAD_CALL_LOGREAD_PHONE_STATEREAD_EXTERNAL_STORAGEWRITE_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
相关产品推荐
相关产品推荐

