2010-12-12 102 views
5

我使用意圖過濾器來聽的變化PHONE_STATE我怎樣才能確定是否有呼叫振鈴的「2號線」(如呼叫等待)

<!-- Listen for phone status changes --> 
    <receiver android:name=".IncomingCallReciever"> 
      <intent-filter> 
       <action android:name="android.intent.action.PHONE_STATE" /> 
      </intent-filter> 
    </receiver> 

...並可以很容易地檢測來電

 intent != null 
    && intent.getAction().equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED) 
    && intent.hasExtra(TelephonyManager.EXTRA_STATE) 
    && intent.getStringExtra(TelephonyManager.EXTRA_STATE).equals(TelephonyManager.EXTRA_STATE_RINGING) 

......但我怎麼能確定是否是線1或線2振鈴?

我的應用程序需要做出反應,只有當用戶是目前一個電話,另一個電話呼入。

回答

13

我找到了一種方法來實現這...張貼的「未來人」。

概括地說,三個國家之間的電話狀態招式:

  1. 「空閒」 - 你不使用手機
  2. 「呼入」 - 電話是
  3. 未來「OFF_HOOK ' - 電話摘機

當廣播'RINGING'狀態時,緊接着是IDLE或OFF_HOOK,以恢復狀態爲預先呼入。

把它放在一起,你結束了這一點:

package com.telephony; 

import android.content.BroadcastReceiver; 
import android.content.Context; 
import android.content.Intent; 
import android.telephony.TelephonyManager; 

public class PhoneStateChangedReciever extends BroadcastReceiver { 

    private static String lastKnownPhoneState = null; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     if(intent != null && intent.getAction().equals(TelephonyManager.ACTION_PHONE_STATE_CHANGED)) { 

      //State has changed 
      String newPhoneState = intent.hasExtra(TelephonyManager.EXTRA_STATE) ? intent.getStringExtra(TelephonyManager.EXTRA_STATE) : null; 

      //See if the new state is 'ringing' 
      if(newPhoneState != null && newPhoneState.equals(TelephonyManager.EXTRA_STATE_RINGING)) { 

       //If the last known state was 'OFF_HOOK', the phone was in use and 'Line 2' is ringing 
       if(lastKnownPhoneState != null && lastKnownPhoneState.equals(TelephonyManager.EXTRA_STATE_OFFHOOK)) { 
        ... 
       } 

       //If it was anything else, the phone is free and 'Line 1' is ringing 
       else { 
        ... 
       } 
      } 
      lastKnownPhoneState = newPhoneState; 
     } 
    } 
}