2012-11-25 34 views
0

我需要檢測GSM手機何時剛剛連接到網絡(從手機信號塔不能連接到手機信號塔)。爲此我設置了廣播接收器 AIRPLANE_MODE(關閉)和BOOT_COMPLETE,當這兩個被解僱時,我會循環一段時間,直到檢測到網絡。但是,除了這種手機可能會在Android - Broadcast Reciever檢測手機剛剛連接到塔時?

手機信號塔根本就沒有可用的位置

如何檢測這種情況呢?

+0

「android.net.conn.CONNECTIVITY_CHANGE」在連接狀態發生變化時在所有情況下都會被觸發。所以我只使用了這一個單獨的動作。問題是它在清單中的Actions下拉列表中不可用。無需爲此設置權限。它似乎現在工作得很好。 – Deepak

+0

如上所述,我需要檢測設備是否具有服務提供商連接,而不是數據連接。 – Deepak

回答

2

您可以使用一個BroadcastReceiver建立與「android.net.conn.CONNECTIVITY_CHANGE」的意圖過濾

<receiver android:name=".ConnectivityActionReceiver"> 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 

在這種接收器,你可以看看意圖的額外搞清楚,如果你有一個連接與否。我這樣做如下:

@Override 
public void onReceive(Context context, Intent intent) 
{ 
    Intent startIntent; 
    SharedPreferences prefs; 
    String action; 
    int updateType; 

    action = intent.getAction(); 
    if (!action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) 
     return; 

    /* If we don't have a connection, nothing to do */ 
    if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, false)) 
     return; 

如果第二次檢查,如果是真的,這意味着沒有網絡連接,所以接收器退出。下次連接發生變化時,接收器再次激活並再次運行此檢查。一旦通過支票,我就會繼續做我所做的一切。

+0

我無法找到接收器操作列表中的CONNECTIVITY_CHANGE選項。我正在使用GB 2.3.3。我也檢查了API級別16. – Deepak

+0

「android.net.conn.CONNECTIVITY_CHANGE」不在清單文件中的接收器操作的常規下拉列表中顯示。但它似乎在我使用它時起作用。有沒有什麼地方可以得到所有行動的列表,如果可能的話,他們的描述。 DOCS似乎沒有一個排序列表,我不是他們的解釋大粉絲。 – Deepak

+0

在模擬器上,當手機關機時,廣播接收器被觸發,飛行模式打開/關閉。但在我的設備上運行GB的Samsung Galaxy S僅在啓用/禁用3G時觸發,即數據網絡發生變化。 – Deepak

0

CONNECTIVITY_CHANGE似乎適用於飛行模式的模擬器,但在我的設備上,它僅針對3G網絡狀態更改而被解僱。現在,我不得不解決了SERVICE_STATE_CHANGE問題,因此在飛機模式和突然失去塔臺之間切換時被解僱。爲了重新啓動,我使用了BOOT_COMPLETED。