如何解决传出电话中的媒体记录器故障
我正在尝试在我的班级中记录一个传出的电话,该电话扩展了BroadcastReceiver,并且看到两个失败:
- 此开始录制功能后立即出现-
E / MediaRecorder:启动失败:-38
- 我调用prepare函数后出现此错误-
E / Media_APM :: isCalledPackage返回false
我必须提到,当我在模拟器上运行它时,我看不到那些错误(但是您无法在模拟器上测试电话录音),我只能在Samsung Galaxy 8上运行该应用程序时看到这些错误。 (已安装Android Pie)和Samsung Note 20(已安装Android Pie)。 当我在小米Mi A9(安装了Android Q)上运行它时,它不会失败,但也不会录制任何东西-我看到了音频文件,它的长度正确,但是为空)。
这是我的代码:
public class CallBr extends BroadcastReceiver {
Bundle bundle;
String state;
@RequiresApi(api = Build.VERSION_CODES.O)
@Override
public void onReceive(Context context,Intent intent) {
if (Objects.equals(intent.getAction(),ACTION_IN)) {
if ((bundle = intent.getExtras()) != null) {
state = bundle.getString(TelephonyManager.EXTRA_STATE);
if (state != null && state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) {
if (shouldStartRecording) {
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
recorder.setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
File callAudioFile = null;
try {
File downloadsDir = context.getApplicationContext().getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS);
callAudioFile = File.createTempFile("deTuCelRecord",".amr",downloadsDir);
} catch (IOException e) {
e.printStackTrace();
}
assert callAudioFile != null;
audioFilePath = callAudioFile.getAbsolutePath();
recorder.setOutputFile(audioFilePath);
try {
recorder.setOnErrorListener(new MediaRecorder.OnErrorListener() {
@Override
public void onError(MediaRecorder mr,int what,int extra) {
Log.e("MediaRecorder","MediaRecorder error " + what + " " + extra);
}
});
recorder.prepare();
} catch (Error e) {
Log.e("RecPrep","So there was an error ...");
e.printStackTrace();
Log.d("RecPrep","Did you get what that error was?");
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
Log.e("RecPrep","startRecording: ",e);
}
recorder.start();
recordStarted = true;
shouldStartRecording = false;
}
shouldStartRecording = true;
}
if (state != null && state.equals(TelephonyManager.EXTRA_STATE_IDLE)) {
if (recordStarted) {
recorder.stop();
recorder.release();
convertToAmr();
compareAudioFiles(context);
recordStarted = false;
}
}
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。