Java 使用PhoneStateListener打开扬声器
我使用的是PhoneStateListener,所以当用户接到电话或开始通话时,扬声器会立即打开Java 使用PhoneStateListener打开扬声器,java,android,Java,Android,我使用的是PhoneStateListener,所以当用户接到电话或开始通话时,扬声器会立即打开 PhoneStateListener phoneStateListener = new PhoneStateListener() { @Override public void onCallStateChanged(int state, String incomingNumber) { if (state ==
PhoneStateListener phoneStateListener = new PhoneStateListener()
{
@Override
public void onCallStateChanged(int state, String incomingNumber)
{
if (state == TelephonyManager.CALL_STATE_RINGING)
{
} else if(state == TelephonyManager.CALL_STATE_IDLE)
{
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.setSpeakerphoneOn(false);
} else if(state == TelephonyManager.CALL_STATE_OFFHOOK)
{
AudioManager audioManager = (AudioManager)getSystemService(Context.AUDIO_SERVICE);
audioManager.setSpeakerphoneOn(true);
}
super.onCallStateChanged(state, incomingNumber);
}
};
TelephonyManager mgr = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
if(mgr != null)
{
mgr.listen(phoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
}
这是我使用的代码。在我安装jelly bean之前,它工作得很好,现在我注意到它只在用户接到电话时才打开扬声器,但如果他开始通话,它什么也不做。我发现了它
TelephonyManager似乎只适用于传入呼叫
对于传出呼叫,请使用IntentFilter的intent android.intent.action.NEW_outgoing_CALL string参数创建广播侦听器,并且不要忘记在AndroidMenifest中授予处理传出呼叫的权限。这会奏效的。每当有外呼时,广播侦听器中就会调用onReceive。奇怪,当电话在另一端响起时(拨打外呼时),状态应该是OFFHOOK。嗯,你能帮我一下吗?我是java和android开发的新手。如何制作广播侦听器?上面写着02-20 18:36:36.164:E/AndroidRuntime(19345):原因:java.lang.SecurityException:权限拒绝:不允许从pid=19345,uid=10183发送广播android.intent.action.NEW_OUTGOING_调用您需要权限,在这种情况下,请将其放入清单中。这个问题也得到了回答,它并不是要让你问每一个问题,因为你不太了解Java。尝试阅读android开发网站。也可以搜索关于广播听众的答案。很多答案已经存在。例如,如果此答案对上述问题有帮助,请将其标记为已回答。不要老是问新问题。我们不会创建您的整个应用程序。当你尝试了所有的方法却无法成功时,我们会帮助你。因此,在询问之前,请先尝试自己制作广播收听者。我理解,我很抱歉询问广播收听者的情况,因为我已经找到了制作广播收听者的方法。事情是,我从一开始就按照你说的做了。我在清单中添加了“android.permission.Processing_OUTGOING_CALLS”(android.permission.Processing_OUTGOING_CALLS),然后我得到的错误信息是:“拒绝许可…”所以没有回答。