如何在安卓系统中录制声音和电话通话?

37
请帮忙,如果您知道如何在Android上录制呼入和呼出电话,请告诉我。
8个回答

10

可以做到,只需要这样做。

final MediaRecorder callrecorder = new MediaRecorder();
callrecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);
callrecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
callrecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

callrecorder.setOutputFile(filepath);

try {
    callrecorder.prepare();
} catch (IllegalStateException e) {
    System.out.println("An IllegalStateException has occured in prepare!");
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {

    //throwing I/O Exception
    System.out.println("An IOException has occured in prepare!");
    // TODO Auto-generated catch block
    e.printStackTrace();
}

try {
    callrecorder.start();
} catch(IllegalStateException e) {
    e.printStackTrace();
    //Here it is thorowing illegal State exception
    System.out.println("An IllegalStateException has occured in start!");
}

停止时可以使用

callrecoder.stop();

我在两个设备上遇到了“setAudioSource失败”的异常:Galaxy S3和Xperia Arc S。 - Yar
使用MediaRecorder.AudioSource.VOICE_CALL而不是MediaRecorder.AudioSource.VOICE_COMMUNICATION进行点赞。 - Yogesh Seralia
1
我遇到了这个错误:MediaRecorder: start failed: -2147483648。 - Ajith K P

8

6
据我所知,所有在Android上记录语音通话的应用程序都存在同样的问题:它们只能在一些手机上工作,而在其他手机上只能听到对话的一方。其中一些应用程序尝试通过同时从麦克风录制来解决此问题。
如果您的Android手机具有root权限,则我相信有些应用程序可以更好地工作,因为它们可以访问低级流,正如Emmanuel在他的回答中指定的那样。

应用程序在Root权限下具体会做什么?它们如何克服这个问题? - android developer

5
我不知道是否可能,但就API而言。
recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL);

这行代码在我的程序中编译良好,其中recorder是一个MediaRecorder对象。我曾经在这样的项目上工作过,但后来该项目被放弃了,所以不确定它是否可行。


4

很抱歉,您无法在Android上录制电话对话。流数据位于较低级别的操作系统中,应用程序层面无法访问。请谅解。


3
像“自动通话录音”等应用程序如何运作?它们甚至可以在没有 root 权限的情况下工作。 - Zax
1
他们是如何做到的? - motis10

2

根据手机型号不同而异。 例如,在Nexus和Motorola手机上,您无法记录通话,因为它们不允许在通话进行时从麦克风录制。但是,在大多数三星和Galaxy设备上,通话期间从麦克风录制相同的内容可以正常工作。


2

API 显然已经存在,但制造商已经禁用了其无线电固件的此功能。


1

我很担心得知安卓没有本地API来记录语音通话,即使流在操作系统中被抽象化并且在应用层中无法访问,正如Emmanuel所说。我认为这是安卓开发人员的一个严重错误。如果安全墙有一个小洞,它就不再安全了。因此,即使安卓限制或试图限制,仍然存在其他手机可以具有这种功能。甚至自定义的安卓内核也可以具有这种功能。这只会让安卓用户变得更加贫穷,没有其他作用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接