我对android中的通话记录非常感兴趣。但正如你已经知道的那样,android 9正式关闭了语音通话记录。但就在Android 10发布后(2019年9月3日),在浏览他们的新发行说明时,我看到了下面的页面,在通话记录方面看起来很有希望。https://developer . Android . com/guide/topics/media/sharing-audio-input关于语音通话记录,可以看到以下内容。
< i> 语音通话普通应用程序
如果AudioManager.getMode()返回的音频模式是MODE_IN_CALL或MODE_IN_COMMUNICATION,则语音通话处于活动状态。
Android根据以下规则共享输入音频:
通话始终接收音频。如果应用程序是辅助功能服务,则可以捕获音频。如果应用程序是具有权限CAPTURE_AUDIO_OUTPUT的特权(预装)应用程序,则可以捕获语音通话。
< I >要捕获语音通话的上行链路(TX)、下行链路(RX)或两者,应用程序必须指定音频源MediaRecorder。音频源。语音_上行或媒体记录器。AudioSource.VOICE_DOWNLINK和/或设备AudioDeviceInfo。电话类型。
因此,在阅读本文后,我试图在辅助功能服务中捕获音频。这是我的代码。无障碍服务
public class MyAccessibilityService extends AccessibilityService {
FrameLayout mLayout;
public MyAccessibilityService() {
}
@Override
public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) {
}
@Override
public void onInterrupt() {
}
@Override
protected void onServiceConnected() {
WindowManager wm = (WindowManager) getSystemService(WINDOW_SERVICE);
mLayout = new FrameLayout(this);
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.type = WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY;
lp.format = PixelFormat.TRANSLUCENT;
lp.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
lp.width = WindowManager.LayoutParams.WRAP_CONTENT;
lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
lp.gravity = Gravity.TOP;
LayoutInflater inflater = LayoutInflater.from(this);
inflater.inflate(R.layout.action_bar, mLayout);
wm.addView(mLayout, lp);
configureStartRecording();
configureStopRecording();
}
private void configureStartRecording() {
Button startRecordingButton = mLayout.findViewById(R.id.btnStartRecording);
startRecordingButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CustomMediaRecorder recorder = CustomMediaRecorder.getInstance();
File audiofile = null;
String out = new SimpleDateFormat("dd-MM-yyyy hh-mm-ss").format(new Date());
File sampleDir = new File(getExternalFilesDir(null), "/TestRecordingDasa1");
if (!sampleDir.exists()) {
sampleDir.mkdirs();
}
String file_name = "Record";
try {
audiofile = File.createTempFile(file_name, ".amr", sampleDir);
} catch (IOException e) {
e.printStackTrace();
}
recorder.getRecorder().setAudioSource(MediaRecorder.AudioSource.VOICE_COMMUNICATION);
recorder.getRecorder().setOutputFormat(MediaRecorder.OutputFormat.AMR_NB);
recorder.getRecorder().setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.getRecorder().setOutputFile(audiofile.getAbsolutePath());
try {
recorder.getRecorder().prepare();
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
recorder.start(getApplicationContext());
Log.i(MainActivity.LOG_PREFIX, String.format("Recording started. Saving to path: '%s'", audiofile.getAbsolutePath()));
}
});
}
private void configureStopRecording() {
Button button = mLayout.findViewById(R.id.btnStopRecording);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
CustomMediaRecorder recorder = CustomMediaRecorder.getInstance();
recorder.stop();
}
});
}
辅助功能服务配置具有以下配置
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagDefault"
android:canPerformGestures="true"
android:canRetrieveWindowContent="true"
以下是我的观察。< br> 1。我们仍然无法设置MediaRecorder。音频源。语音_下行和语音_上行音频源。它会引发一个异常。< br> 2。当MediaRecorder。音频源。语音通讯和媒体记录器。在开始通话之前,麦克风被给予麦克风输入,并且在断开连接之后,通话被记录。< br>
所以看起来我们没有从调用中获得任何流,即使是从辅助功能服务中。我在一台最新更新到android 10的pixel 3A xl设备上尝试了这一点。< br>
读完这篇文章后,在我失败的试验后,我有以下问题...
简言之,我只想知道语音通话记录是否回到了android 10
首先感谢您的代码。我尝试使用相同的代码,我使用了MediaRecorder.AudioSource.VOICE_RECOGNITION
,我在三星S10、Oneplus 7和Real Me中获得了双方通话录音。
问题内容: 我想通知任何传入和传出语音呼叫的代码。我需要掌握以下所有内容: 如果是来电或去电 拨打的号码或来电显示的电话号码 通话时长,或者如果错过了通话 如果电话号码与电话的联系人列表中的某人匹配,如果我可以获得更多的联系信息,特别是联系人姓名,那也将是一件很圆滑的事。 通话结束后,我需要我的代码来获取这些信息。也许我只是没有在寻找正确的术语,但是我很难找到如何实现此目标的任何示例。 如果有人可
我正在开发一个使用MediaRecorderVOICE_CALL音频源的通话记录器应用程序,在一些Marshmallow设备中,它崩溃了,然后我将源更改为MIC,这里输入的语音没有被记录。由于这个java限制,现在我正在使用原生android代码来记录语音通话。我设法使用原生音频记录器来记录通话记录器的音频。问题是在原生代码中,它也只记录一侧语音,输入的语音没有被记录。然后我尝试了语音通信预设配置
我有一个应用程序whcih记录传入和传出语音呼叫,它在Marshmallow或更高版本的设备上运行良好versions.But当我尝试在android 5.1.1上运行它时,它给我错误,应用程序停止响应。 我用于录制语音通话的代码是 - 编辑-我按照下面的回答做了,但是错误仍然存在。通过稍微调整代码,调用状态现在只被调用一次,但应用程序仍然崩溃,甚至异常也是一样的。
我正在开发一个应用程序,希望在用户之间实现屏蔽数字。想法是。。。假设你想打电话给我。你不会通过仪表板和/或订单显示页面看到我的号码,而是会看到一个“呼叫”按钮。当你点击这个按钮时,手机会响。当你接电话时,twilio会尝试将你连接到我的号码,但是,你看到的号码将是twilio号码,而不是我的号码。我正在Rails中开发。我想我快到了,但还是有个错误。这是我的代码: 我在routes中添加了这条路线
我正试图创建一个呼叫录音机应用程序,然而,我的音频来源时,它的麦克风工作正常,但它不能捕捉第二个声音。 如果我更改为VOICE_CALL,我的应用程序关闭。 我在PlayStore上看到了数百个类似的应用程序,并想知道它们能够记录通话双方的秘密是什么。
我在Android的通话记录应用程序中工作,以记录双方的语音,它在Android版本6之前工作良好,但在Android 7中不工作。Android 7的问题是远程语音未记录或可能听不到。 我用的是MediaRecorder。我尝试了所有的音频来源,但没有运气。如果有人知道如何在Android 7中实现这一点,请分享它或一些关于这方面的建议将非常有帮助。