【问题标题】:AudioRecorder blocks microphoneAudioRecorder 阻止麦克风
【发布时间】:2012-08-07 05:03:18
【问题描述】:

我正在开发一个允许用户做语音笔记的应用程序。为此,我使用 AudioRecorder 不断地从麦克风获取音频数据并将其处理成 Mp3。

这一切都很好,直到最近我发现如果我在我的应用程序在后台运行时接听/拨打电话,对方听不到我的声音。单击拨号器屏幕上的静音/取消静音按钮不会做任何事情 - 麦克风似乎被禁用,直到我停止我的应用程序。

现在的问题是我该如何处理这种情况?我唯一的选择是在语音通话开始后释放 AudioRecorder 吗?如果 AudioRecorder 在通话期间只是跳过麦克风中的音频数据,我完全没问题,但是用户可以因为应用程序进行通信的情况是不可接受的。

谢谢,

【问题讨论】:

    标签: android audio-recording


    【解决方案1】:

    在任何给定时间,只有 1 个应用可以使用麦克风。您可能希望使用 PhoneStateListener,以便在电话响起或摘机时释放录音机。

    【讨论】:

    • 你知道,我在运行 Android 4.1 的 Nexus S 上看不到这个问题,但是我在 Android 2.3.3 上的 HTC Sensation 确实遇到了这个问题。所以我想知道问题是 HTC 还是 Android 版本特定的
    • 不同之处可能在于某些设备实现会强制关闭您的应用对麦克风的访问权限。
    • 不,应用程序在后台愉快地运行
    【解决方案2】:

    您可以使用 PHONE_STATE 操作作为 BroadcastReceiver 的一部分来拦截来电。然后,在接收器的 onReceive 函数中,您将检查手机的状态:

    public void onReceive(Context context, Intent intent) {
    
        String state = intent.getStringExtra(TelephonyManager.EXTRA_STATE);
    
        if(state.equals(TelephonyManager.EXTRA_STATE_RINGING)){
            //Phone is ringing
    
        }else if(state.equals(TelephonyManager.EXTRA_STATE_OFFHOOK){
            //Call received
    
    
        }else if (state.equals(TelephonyManager.EXTRA_STATE_IDLE)){
            //Call Dropped or rejected
    
        }
    
    }
    

    不要忘记在清单中添加必要的权限。

    同样,您也可以拦截拨出电话。 Here 是一个很好的教程,解释了如何做到这两点。

    剩下的就是根据你拦截的内容来停止和恢复记录器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多