2012-08-06 261 views
0

我正在研究一个应用程序,它允许用户采取语音笔记。为此,我使用AudioRecorder不断从麦克风获取音频数据并将其处理为MP3。AudioRecorder块麦克风

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

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

谢谢,

回答

0

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

+0

你知道,我在运行Android 4.1的Nexus S上看不到问题,但是我的HTC Sensation在Android 2.3.3上确实遭受了这个问题。所以我想知道如果问题是HTC或Android版本特定 – Anton 2012-08-06 21:38:29

+0

区别可能是某些设备实现强制关闭您的应用程序访问麦克风。 – 2012-08-06 21:40:13

+0

不,应用程序高兴地在后台运行 – Anton 2012-08-06 21:44:39

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 

    } 

} 

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

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

其余的是关于停止和恢复记录器取决于你拦截什么。