2013-11-26 64 views
0

這是我第一次使用廣播接收器,我認爲它會比這更簡單一點。我有一個類看起來像這樣:使用BroadcastReceiver獲取網絡狀態變化

public class NetworkChangeReceiver extends BroadcastReceiver { 

@Override 
public void onReceive(Context context, Intent intent) { 
    ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo wifi = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI); 
    NetworkInfo mobile = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE); 

    boolean isConnected = wifi != null && wifi.isConnectedOrConnecting() || mobile != null && mobile.isConnectedOrConnecting(); 
    if (isConnected) { 
     Log.d("Network Available ", "YES" + getResultCode()); 

    }else{ 
     Log.d("Network Available ", "NO" + getResultCode()); 

    } 
} 
} 

,我已經註冊在我的應用程序是這樣

 mReceiver = new NetworkChangeReceiver(); 
    registerReceiver(mReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 

,這是工作正常,當我關閉我的無線,我得到「NO 「在log.d ..但我怎麼得到的東西」發生「?我想要一個返回值或我可以使用的東西,例如,如果isConnected爲false,那麼重新啓動活動或其他東西。 我搜索了幾天,試圖瞭解他們是什麼以及他們如何工作...請幫助!

回答

0

那麼,該方法的類型爲void,所以返回值是不可能的。此外,呼叫類將爲BroadcastManagerLocalBroadcastManager,因此您無法訪問潛在的返回值。

可能在您的BroadcastReceiver中註冊自定義偵聽器,但這將意味着保留不必要的引用。

我會在你的情況做的是火了另一個廣播與「否」塊定製的「動作」字符串:

else{ 
    Log.d("Network Available ", "NO" + getResultCode()); 
    LocalBroadcastManager.getInstance(context).sendBroadcast(new Intent(YOUR_CUSTOM_ACTION_NAME)); 
} 

註冊一個偵聽該事件的任何需要的地方和處理的行爲有。

相關問題