gpt4 book ai didi

java - 通话录音应用程序无法在 Android 操作系统版本 7.0 以上运行

转载 作者:行者123 更新时间:2023-12-02 01:36:31 27 4
gpt4 key购买 nike

我正在开发通话录音应用程序,该应用程序在 Android 操作系统版本 6.0 之前运行良好,但在操作系统版本 7.0 及以上版本上它会停止录制来电语音。我根据设备要求使用 MediaRecorder.AudioSource.VOICE_CALLMediaRecorder.AudioSource.VOICE_COMMUNICATION 。提供下面的代码,

private boolean startMediaRecorder(int audioSource){
recorder = new MediaRecorder();
try{
recorder.reset();
recorder.setAudioSource(audioSource);
recorder.setAudioSamplingRate(8000);
recorder.setAudioEncodingBitRate(12200);
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
fileName = FileHelper.getFilename(phoneNumber,type,getApplicationContext());
recorder.setOutputFile(fileName);

OnErrorListener errorListener = new OnErrorListener() {
public void onError(MediaRecorder arg0, int arg1, int arg2) {
Log.e(Constants.TAG, "OnErrorListener " + arg1 + "," + arg2);
terminateAndEraseFile();
}
};
recorder.setOnErrorListener(errorListener);

OnInfoListener infoListener = new OnInfoListener() {
public void onInfo(MediaRecorder arg0, int arg1, int arg2) {
Log.e(Constants.TAG, "OnInfoListener " + arg1 + "," + arg2);
terminateAndEraseFile();
}
};
recorder.setOnInfoListener(infoListener);

recorder.prepare();
// Sometimes prepare takes some time to complete
Thread.sleep(2000);
recorder.start();
recording = true;
return true;
}catch (Exception e){
e.getMessage();
return false;
}
}

private void startRecording(Intent intent) {
Log.d(Constants.TAG, "RecordService startRecording");
boolean exception = false;


if (!startMediaRecorder(MediaRecorder.AudioSource.VOICE_CALL)){
if(startMediaRecorder(MediaRecorder.AudioSource.MIC)){
audioManager =(AudioManager) getSystemService(Context.AUDIO_SERVICE);
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setStreamVolume(3,audioManager.getStreamMaxVolume(AudioManager.STREAM_VOICE_CALL),0);
Intent intent1 = new Intent(getBaseContext(), DialogConfirmActivity.class);
intent1.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent1);
}else{
exception = true;
}
}

if (exception) {
terminateAndEraseFile();
}

if (recording) {
Toast toast = Toast.makeText(this,
this.getString(R.string.receiver_start_call),
Toast.LENGTH_SHORT);
toast.show();
} else {
Toast toast = Toast.makeText(this,
this.getString(R.string.record_impossible),
Toast.LENGTH_LONG);
toast.show();
}
}

我已在 Android list 中启用了权限,但需要 CAPTURE_AUDIO_OUTPUT 权限才能在两端录制语音,这是系统级权限,因此我在授予此类权限时遇到困难。请建议我一种授予此类权限的方法或任何在所有设备中启用 MediaRecorder.AudioSource.VOICE_CALL 方法的替代方法。

最佳答案

从 Android M 及更高版本,您需要在运行时请求许可。您可以在 Manifest 中将权限声明为,

<uses-permission android:name="android.permission.RECORD_AUDIO" />

然后在启动器 Activity 的 onCreate 期间请求相同的内容。检查这个link详细解释。另请确保您使用 VOICE_COMMUNICATION 而不是现已弃用的 VOICE_CALL

关于java - 通话录音应用程序无法在 Android 操作系统版本 7.0 以上运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55176069/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com