我的情况很奇怪。
我在if语句中比较两个字符串。这很奇怪,因为在CALL_STATE_RINGING中它返回TRUE,但是在CALL_STATE_OFFHOOK中它返回FALSE!
这是我的代码的一部分:
private String strRegisterNumber1 = "";
private String strRegisterNumber2 = "";
...........
strRegisterNumber1 = fileManager.getItems(0);
strRegisterNumber2 = fileManager.getItems(1);
...........
switch (state)
{
case TelephonyManager.CALL_STATE_IDLE:
Log.i("DEBUG", "idle");
break;
case TelephonyManager.CALL_STATE_OFFHOOK:
if (incomingNumber.equals( strRegisterNumber1) || incomingNumber.equals( strRegisterNumber2))
// returns FALSE here!
{
AudioManager audioManager = (AudioManager) contextMember.getSystemService(Context.AUDIO_SERVICE);
audioManager.setSpeakerphoneOn(true);
audioManager.setStreamVolume(AudioManager.STREAM_MUSIC, audioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC), 0);
}
break;
case TelephonyManager.CALL_STATE_RINGING:
if (incomingNumber.equals( strRegisterNumber1) || incomingNumber.equals( strRegisterNumber2))
// returns TRUE here!!!
{
//do something...
}
break;
}
}
怎么了
感谢您的帮助!
编辑:
我从这里得到的入库编号:
ServiceReciever.java
public class ServiceReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
MyPhoneStateListener phoneListener = new MyPhoneStateListener(context);
TelephonyManager telephony = (TelephonyManager)context.getSystemService(Context.TELEPHONY_SERVICE);
telephony.listen(phoneListener, PhoneStateListener.LISTEN_CALL_STATE);
}
}
我从FileManager检索的strRegisterNumber正确。
最佳答案
如官方文档http://developer.android.com/reference/android/telephony/TelephonyManager.html#ACTION_PHONE_STATE_CHANGED所述,仅在CALL_STATE_RINGING中返回传入号码
广播意图动作,指示设备上的呼叫状态(蜂窝)已更改。
EXTRA_STATE额外表示新的呼叫状态。如果是新状态
是RINGING,再加上EXTRA_INCOMING_NUMBER个来电
电话号码作为字符串。
关于java - 扬声器仅适用于两个联系人Android,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16285037/