1

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

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

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

谢谢,

4

2 回答 2

0

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

于 2012-08-06T20:57:50.100 回答
0

您可以使用 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

    }

}

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

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

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

于 2012-08-06T21:03:18.090 回答