【发布时间】:2015-10-14 18:37:38
【问题描述】:
我正在开发一个可以在 Android 中记录通话的应用程序。我已经阅读了很多讨论通话录音问题的主题。而且我知道并不是所有的安卓手机都可以录音。但我想知道如何记录 Play Market 上最受欢迎的应用程序的呼叫,例如 https://play.google.com/store/apps/details?id=com.appstar.callrecorder 或 https://play.google.com/store/apps/details?id=polis.app.callrecorder。我认为你不是在使用 MediaRecorder 类来完成这项工作,而是使用其他东西。因为我已经开发了自己的应用程序,但我只能录制我的声音。但是这两个应用程序正在录制我的声音和我正在呼叫的人的声音。他们是怎么做到的?我知道我们无法访问设备扬声器来录制声音。你能给我一些关于如何录制语音电话的想法吗?这是我在应用程序中使用的代码:
public class CallRecorderService extends Service {
private MediaRecorder mRecorder;
private boolean isRecording = false;
private PhoneStateListener phoneStateListener = new PhoneStateListener() {
@Override
public void onCallStateChanged(int state, String incomingNumber) {
super.onCallStateChanged(state, incomingNumber);
switch (state) {
case TelephonyManager.CALL_STATE_IDLE:
stopRecording();
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
startRecording(incomingNumber);
break;
case TelephonyManager.CALL_STATE_RINGING:
break;
default:
break;
}
}
};
@Override
public void onCreate() {
TelephonyManager telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
super.onCreate();
}
@Override
public void onDestroy() {
super.onDestroy();
}
@Override
public IBinder onBind(Intent intent) {
return null;
}
private void startRecording(String number) {
try {
String savePath = Environment.getExternalStorageDirectory().getAbsolutePath();
savePath += "/Recorded";
File file = new File(savePath);
if (!file.exists()) {
file.mkdir();
}
savePath += "/record_" + System.currentTimeMillis() + ".amr";
mRecorder = new MediaRecorder();
SharedPreferences sPrefs = getSharedPreferences(Constants.PREFERENCES_NAME, Context.MODE_PRIVATE);
int inputSource = sPrefs.getInt(Constants.SOURCE_INPUT, Constants.SOURCE_VOICE_CALL);
int outputSource = sPrefs.getInt(Constants.SOURCE_OUTPUT, Constants.OUTPUT_MPEG4);
switch (inputSource) {
case Constants.SOURCE_MIC:
increaseSpeakerVolume();
break;
}
mRecorder.setAudioSource(inputSource);
mRecorder.setOutputFormat(outputSource);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mRecorder.setOutputFile(savePath);
mRecorder.prepare();
mRecorder.start();
isRecording = true;
} catch (Exception ex) {
ex.printStackTrace();
}
}
private void stopRecording(){
if (isRecording) {
isRecording = false;
mRecorder.stop();
mRecorder.release();
}
}
private void increaseSpeakerVolume(){
AudioManager audio = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
audio.adjustStreamVolume(AudioManager.STREAM_VOICE_CALL,
AudioManager.ADJUST_RAISE,
AudioManager.FLAG_SHOW_UI);
}
}
【问题讨论】:
-
检查This Out
-
我使用的是相同的代码 recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); //语音下行/上行recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);录音机.setAudioEncoder(AudioEncoder.AAC);但这对我没有帮助。我认为 PlayMarket 上的这些顶级应用程序正在使用 MediaRecorder.AudioSource.MIC 并且还增加了设备上扬声器的声音以记录双方。您对此有何看法?
-
“你在想什么?”听起来你最终会得到一个非常糟糕的录音。另外,也许您不想一直使用免提模式。
-
好的,所以这不是一个好主意。我在我的应用程序中使用了很多不同的输入和输出(CAMCORDER、DEFAULT、MIC、REMOTE_SUBMIX、VOICE_CALL、VOICE_COMMUNICATION、VOICE_DOWNLINK、VOICE_RECOGNITION、VOICE_UPLINK)。但他们都只录了我的声音,或者根本不工作。
标签: java android phone-call