2012-04-23 311 views
0

通過手機支持的任何方法,即GSM或CDMA(不是SIP)。我嘗試過使用ConnectivityManager,但TYPE_MOBILE的NetworkInfo似乎返回了!連接到WiFi時IsConnected,儘管我有一個完整的信號。如何檢查我是否可以撥打電話?

我想知道是否可以打電話,所以我猜想TelephonyManager.getDataState不合適。

我的回答

(不能張貼另外7小時)

看來我是在正確的地方,只是不太確認正確的方法。實際上,似乎只有一個TYPE_連接(即TYPE_MOBILE,TYPE_WIFI)會返回IsConnected(),所以我應該檢查連接是否是IsAvailable()。我在移動數據啓用和禁用的情況下對此進行了測試,並且在兩種情況下都給出了正確的結果(即:當我有移動信號時爲true,當我沒有時爲false,無論移動數據是否啓用)。

注意:要禁用移動數據,在ICS轉到設置 - >無線&網絡 - >更多 - >移動網絡 - >數據啓用(取消選擇它)。

回答

0

首先檢查PackageManager hasSystemFeature(PackageManager.FEATURE_TELEPHONY),然後 你可以使用TelephonyManager getSimState()

+0

SIMSTATE = {SIM_STATE_ABSENT,SIM_STATE_NETWORK_LOCKED,SIM_STATE_PIN_REQUIRED, SIM_STATE_PUK_REQUIRED,SIM_STATE_READY, SIM_STATE_UNKNOWN。 – pjcard 2012-04-23 04:59:58

+0

對不起,我討厭按Enter鍵發送評論,並沒有添加一行。我的意思是說,沒有人會告訴我是否有移動信號。 – pjcard 2012-04-23 05:00:49

+0

好的,你自己找到了解決方案。 – Niko 2012-04-23 05:21:16

0

你應該創建一個BroadcastReceiver:案例TelephonyManager.CALL_STATE_OFFHOOK :檢查以前的狀態是CALL_STATE_RINGING或CALL_STATE_IDLE (例如通過在兩種情況下設置不同的標誌)。 在後一種情況下繼續進行打開您的應用程序,:::

​​

你應該註冊您的應用程序,聽取在清單中,這些意圖:

<receiver android:name=".CallReciever"> 
<intent-filter> 
    <action android:name="android.intent.action.PHONE_STATE" /> 
</intent-filter> 
+0

我想知道是否可以撥打電話,而不是撥打電話。應該有一個簡單的方法來獲得這個,而不必自己監視狀態,並且有,請參閱我的答案。 – pjcard 2012-04-23 04:52:17