2009-04-30 103 views
3

我有一個BroadcastReceiver捕獲ACTION_NEW_OUTGOING_CALL事件。Android - 從循環中停止NEW_OUTGOING_CALL事件?

onReceive()方法中,我將提供的號碼發送到新的ListActivity,用戶可從列表中選擇各種新的目標號碼。

當用戶從列表中選擇一個新號碼時,我將使用URI字段中的新號碼開始一個新的ACTION_CALL意圖。或者,結果可能是原始數字。

無論新號碼是什麼,它必須立即撥打,不再進行處理。

我該如何讓BroadcastReceiver知道這個結果數字不應該再次被處理?

回答

5

我通過在我的BroadcastReceiver中實現「Bypass Prefix」來解決這個問題。如果我的客戶端應用程序想要直接調用一個數字,它只是在調用ACTION_CALL Intent之前預先設置前綴。

如果撥打的號碼的(硬編碼)前綴,則BroadcastReceiver去掉前綴和允許呼叫正常進行:

這解決了一個去兩個問題 - 這不僅停止呼叫循環,它也給我一種方式,通過在電話簿條目中存儲前綴來繞過特定號碼的附加處理。

+0

嗨Alnitak,我在HTC Hero遇到過這個問題,我使用setResultData(null)來阻止通話,但它似乎沒有正確地阻止通話。它阻止它確定,但它在使用的應用程序屏幕(按住home鍵)中有一個撥號圖標,當你點擊它時,它似乎嘗試再次調用,然後消失,喲遇到類似的東西?在香草Android上工作正常,但在HTC Hero上有重大問題 – 2010-02-05 15:17:56

0

Broadcast receiver中的onReceive()方法接收一個Intent作爲參數。 使用Intent.getExtras()從Intent中提取Bundle。 此包包括如下3鍵 - 值對:

  1. android.phone.extra.ALREADY_CALLED = NULL
  2. android.intent.extra.PHONE_NUMBER = 98xxxxxx98
  3. android.phone.extra。 ORIGINAL_URI =電話:98xxxxxx98

98xxxxxx98是由用戶所撥的號碼。

當的onReceive()被再次調用,這個數量變爲98xxxxxx98 *0 * 通過檢查在所撥打的號碼的端部的星號(*),它可以當的onReceive推斷()方法在第一次或下一次後續時間被調用。