在安卓手机上记录电话?

Posted

技术标签:

【中文标题】在安卓手机上记录电话?【英文标题】:Record phone calls on android phone? 【发布时间】:2010-07-30 09:37:39 【问题描述】:

我试过并使用以下代码记录拨出电话,但它没有..

  @Override
  public void onReceive(Context context, Intent intent) 
  
          this.context = context;
          if (intent.getAction().equalsIgnoreCase(Intent.ACTION_ANSWER)) 
          
              try
              
                  phonenbr = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
                  Log.v("GDHGDHGHDGDHGDHGHDGHDGH", phonenbr);
                  recorder.setAudiosource(MediaRecorder.AudioSource.MIC);
                  recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
                  recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
                  recorder.setOutputFile(pathname);
                  recorder.prepare();
                  recorder.start();
                  recordstarted = 1;
                  telManager= (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
              
              catch(Exception e)
              
                  e.printStackTrace();
              


              final PhoneStateListener phoneListener = new PhoneStateListener()
                
                    @Override
                     public void onCallStateChanged(final int state, final String incomingNumber)
                        
                            getTelephonyOverview(telManager);
                        
                ;

           telManager.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);


           public void getTelephonyOverview(final TelephonyManager telManager)
           
                   int callState = telManager.getCallState();
                   switch (callState)
                   
                    case TelephonyManager.CALL_STATE_IDLE:
                    
                        if (recordstarted==1)
                        
                            recorder.stop();
                            recordstarted =0;
                        
                        break;
                    
                
           

请为这个问题提供一些好的解决方案..

【问题讨论】:

如果你能提供错误目录,那我可以帮忙.. 您好,我也需要录音。你有机会让它发挥作用吗? 好主意,但在你走得太远之前,我建议你查看与隐私和电话录音有关的当地法律。我知道在美国,对于可以录制的内容并通知用户正在录制,有非常严格的规定。 【参考方案1】:

这可以通过 API 级别 8+ 来解决。将媒体录音机的音频源设置为手机上行链路、下行链路或两者兼而有之。

recorder.setAudioSource(MediaRecorder.AudioSource.VOICE_CALL); //Voice downlink/ Uplink
recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(AudioEncoder.AAC );

但在此之前请注意法律法规。

【讨论】:

我在我的 Droid X 上试过这个,但我一直在 recorder.stop() 上从 MediaRecorder 收到“停止失败:-1007”RuntimeException。 recorder.start() 通过没有问题,并创建了一个非零大小的文件,但无法播放。 你在哪些手机上试过这个?这看起来是一个太简单的解决方案,不可能是真的......然后他们往往是:)【参考方案2】:
    您无法在 android 中很好地录制电话,因为 SDK 应用程序无法使用通话中的音频 ACTION_ANSWER 是not 广播Intent

【讨论】:

还有其他方法可以记录电话吗?? 前阵子看了一下,没办法。 没有 - 在通话结束之前,您甚至无法知道谁在通话(这在通话过程中电话崩溃时非常好) @Kanika 不,您不能录制电话,因为您无权访问 SDK(甚至系统)级别的通话中音频流。 (不知道我是如何不小心冒险进入一个几个月前的线程的,抱歉..)【参考方案3】:

您不能仅通过媒体记录器记录通话。您还必须更改音频管理器的设置并在开始录制之前打开扬声器,音频源将保持不变(麦克风)。所以尝试编辑音频管理器的设置


AudioManager audiomanager = (AudioManager)context.getSystemService("audio"); 
int i = audiomanager.getRouting(2); 
audiomanager.setMode(2);
audiomanager.setMicrophoneMute(false);
audiomanager.setSpeakerphoneOn(true); 
int j = audiomanager.getStreamMaxVolume(0); 
if(j < 0) 
     j = 1; 
int k = j / 2 + 1; 
audiomanager.setStreamVolume(0, k, 0); 
audiomanager.setRouting(2, 11, 15);

【讨论】:

但是如何打开扬声器? @Kartik 您需要在 mainfeast 文件中添加更改音频设置权限。这是我的代码:AudioManager audiomanager = (AudioManager)context.getSystemService("audio"); int i = audiomanager.getRouting(2); audiomanager.setMode(2); audiomanager.setMicrophoneMute(false); audiomanager.setSpeakerphoneOn(true); int j = audiomanager.getStreamMaxVolume(0); if(j &lt; 0) j = 1; int k = j / 2 + 1; audiomanager.setStreamVolume(0, k, 0); audiomanager.setRouting(2, 11, 15);【参考方案4】:

您似乎无法记录来自 API 的调用。一种常见的解决方法是使用免提电话并从麦克风录制 - 在许多设备上,麦克风将通过这种安排充分拾取扬声器。

另一种解决方法是在某处的电话服务上进行录音并通过它路由呼叫。

【讨论】:

【参考方案5】:

此代码可用于记录拨出电话,所以请检查它Here

【讨论】:

以上是关于在安卓手机上记录电话?的主要内容,如果未能解决你的问题,请参考以下文章

安卓手机要怎么才可以拦截 就是某一个地区 区号开头的所有号码?

安卓模拟器上的拨号器在哪

电话号码生成器手机版,苹果和安卓手机均可用

安卓手机无法拨号打电话

使用安卓手机搭建一个网站

怎样在安卓+手机上阅读java文件