当前位置: 首页 > 知识库问答 >
问题:

android 10(2019)是否恢复了语音通话记录?

仲鸿风
2023-03-14

我对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>
读完这篇文章后,在我失败的试验后,我有以下问题...

  1. android 10的新行为到底意味着什么?这里的无障碍服务有什么意义?我试过了,已经失败了?
  2. 我在配置无障碍服务时做错了什么吗?
  3. 如果这种方法不能解决通话录音问题,android 10是否也缺少通话录音功能?或者在android 10中是否有其他方法可以做到这一点。因为我只对android 10中的通话录音感兴趣。

简言之,我只想知道语音通话记录是否回到了android 10

共有1个答案

柯星华
2023-03-14

首先感谢您的代码。我尝试使用相同的代码,我使用了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上看到了数百个类似的应用程序,并想知道它们能够记录通话双方的秘密是什么。

  • 我在应用程序中内置了这个通话记录,问题是如果A打电话给B,A的声音响亮而清晰,但B的声音很低,但它与Android7完美配合 我在Android 9和10中测试了一些通话记录器应用程序,它有同样的问题,但我遇到了这个应用程序呼叫记录器 - Cube ACR,它也有问题,但是当我将记录设置为语音通话(软件)就像在图片中一样,更改此录音后非常清楚 这是项目使用的aykuttasil/CallRecor