如何解决我的移动应用程序无法记录通话 (java)
我正在开发一个可以记录系统音频和通话的应用。我正在使用音频管理器。问题是该应用程序无法记录通话,当有电话时,录音只会在通话结束后停止并恢复。我给你留下我的代码。有人知道如何帮助我吗?
我已经考虑过这篇文章 How to record phone calls in android? 并改编了他在@Mukesh Parmar 上发布的代码
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
BottomNavigationView bottomNavigationView = (BottomNavigationView) findViewById(R.id.bottom_navigation);
rec = findViewById(R.id.btn_rec);
chronometer = findViewById(R.id.chronometer);
prgwait = findViewById(R.id.wait);
stop = findViewById(R.id.btn_stop);
ActivityCompat.requestPermissions(MainActivity.this,new String[]{Manifest.permission.RECORD_AUDIO,Manifest.permission.WRITE_EXTERNAL_STORAGE},REQUEST_RECORD_AUDIO_PERMISSION);
rec.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
prgwait.setVisibility(View.VISIBLE); //start progress
chronometer.setVisibility(View.VISIBLE);
rec.setVisibility(View.GONE);
prgwait.setVisibility(View.GONE); //stop progress
stop.setVisibility(View.VISIBLE);
chronometer.setBase(SystemClock.elapsedRealtime());
chronometer.start();
Toast.makeText(MainActivity.this,"Registration started",Toast.LENGTH_SHORT).show();
//start rec
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(output_formats[currentFormat]);
//recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(getFilename());
recorder.setOnErrorListener(errorListener);
recorder.setOnInfoListener(infoListener);
try {
recorder.prepare();
recorder.start();
} catch (IllegalStateException e) {
Log.e("REDORDING :: ",e.getMessage());
e.printStackTrace();
} catch (IOException e) {
Log.e("REDORDING :: ",e.getMessage());
e.printStackTrace();
}
audioManager = (AudioManager) getApplicationContext().getSystemService(Context.AUDIO_SERVICE); //record the audio of device
audioManager.setMode(AudioManager.MODE_IN_CALL);
audioManager.setSpeakerphoneOn(true); //enable the speaker for record the voices of the call
//end code for rec calls
}
});
//stop a rec
stop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
prgwait.setVisibility(View.VISIBLE); //start progressbar
stop.setVisibility(View.GONE);
chronometer.stop();
chronometer.setVisibility(View.GONE);
rec.setVisibility(View.VISIBLE);
audioManager.setSpeakerphoneOn(false); //turn off the speaker
try {
if (null != recorder) {
recorder.stop();
recorder.reset();
recorder.release();
recorder = null;
}
} catch (RuntimeException stopException) {
}
Toast.makeText(MainActivity.this,"Record saved",Toast.LENGTH_SHORT).show();
//end stop code
chronometer.setBase(SystemClock.elapsedRealtime());
prgwait.setVisibility(View.GONE); }
});
private String getFilename() {
String filepath = Environment.getExternalStorageDirectory().getPath();
File file = new File(filepath,AUDIO_RECORDER_FOLDER);
if (!file.exists()) {
file.mkdirs();
}
return (file.getAbsolutePath() + "/" + System.currentTimeMillis() + file_exts[currentFormat]);
}
private MediaRecorder.OnErrorListener errorListener = new MediaRecorder.OnErrorListener() {
@Override
public void onError(MediaRecorder mr,int what,int extra) {
Toast.makeText(MainActivity.this,"Error: " + what + "," + extra,Toast.LENGTH_SHORT).show();
}
};
private MediaRecorder.OnInfoListener infoListener = new MediaRecorder.OnInfoListener() {
@Override
public void onInfo(MediaRecorder mr,"Warning: " + what + ",Toast.LENGTH_SHORT)
.show();
}
};
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。