0

私は非常に奇妙な状況にあります。

if ステートメントで 2 つの文字列を比較しています。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;
    }
}

ここで何が問題なのですか?

ご協力ありがとうございました!

編集:

私がここから取得しているincomingNumber:

 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 は正しいです。

4

1 に答える 1

1

http://developer.android.com/reference/android/telephony/TelephonyManager.html#ACTION_PHONE_STATE_CHANGEDの公式ドキュメントに記載されているように、着信番号は CALL_STATE_RINGING でのみ返されます。

デバイスの通話状態 (セルラー) が変化したことを示すブロードキャスト インテント アクション。

EXTRA_STATE エクストラは、新しいコール状態を示します。新しい状態が RINGING の場合、2 つ目の追加の EXTRA_INCOMING_NUMBER は着信電話番号を文字列として提供します。

于 2013-04-29T18:31:04.787 に答える