2017-02-19 60 views
0

我的主要活動中設置了一個動態廣播接收器,每當我的網絡狀態發生變化時,都應顯示Toast消息。我在線連接,運行應用程序,「你在線!」吐司消息顯示,我然後關閉我的筆記本電腦上的互聯網,導航回到我的主要活動,我一直得到相同的「你在線!」吐司。我正在檢查我的日誌語句,並且我的NetworkInfo對象保持返回狀態,當我確實沒有時,我確實在線。我在我的模擬器和手機上試過這個。有誰知道爲什麼?檢查在線連接始終返回True

這是我的主要活動包含嵌套我廣播接收機類,意圖過濾器和方法來執行吐司:

public class MainActivity extends AppCompatActivity { 
private IntentFilter onlineIntentFilter; 
private CheckOnlineReceiver checkOnlineReceiver; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    onlineIntentFilter = new IntentFilter(); 
    checkOnlineReceiver = new CheckOnlineReceiver(); 
    onlineIntentFilter.addAction(ConnectivityManager.CONNECTIVITY_ACTION); 

    } 


@Override 
protected void onResume() { 
    super.onResume(); 
    registerReceiver(checkOnlineReceiver, onlineIntentFilter); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 
    unregisterReceiver(checkOnlineReceiver); 
} 


public void isNetworkAvailable() { 
    ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
    NetworkInfo networkInfo = cm.getActiveNetworkInfo(); 
    Log.v("TAG", "NETWORK INFO =========== " + networkInfo); 
    if (networkInfo != null && networkInfo.isConnected()) { 
     Toast.makeText(this,"You Are Online!",Toast.LENGTH_LONG).show(); 
    }else{ 
     Toast.makeText(this,"You Are Not Online!",Toast.LENGTH_LONG).show(); 
    } 
} 
private class CheckOnlineReceiver extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     boolean stateChanged = (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)); 
     if (stateChanged){ 
      isNetworkAvailable(); 
     } 
    } 
}} 

回答

1

這是我會怎麼做:

private class CheckOnlineReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(TAG, "onReceive action: " + intent.getAction()); 
     Log.d(TAG, "onReceive component: " + intent.getComponent()); 
     NetworkInfo networkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO); 
     stateChanged = networkInfo != null && networkInfo.isConnectedOrConnecting(); 

    if (stateChanged) { 
     Toast.makeText(this,"You Are Online!",Toast.LENGTH_LONG).show(); 
    }else{ 
     Toast.makeText(this,"You Are Not Online!",Toast.LENGTH_LONG).show(); 
     } 
    } 
} 

用以下內容替換您的接收器代碼:

registerReceiver(
      checkOnlineReceiver, 
      new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION) 
    ); 
+0

仍然得到相同的結果,不幸的是 –

+0

更新您的代碼,它應該現在工作.. – Deepesh

0

你試圖打開wifi關閉在模擬器上,看看會發生什麼? networkInfo.isConnected()不檢查Internet。這僅表示存在活動連接。

+0

有沒有我應該使用另一種方法? –

+1

我自己做的是Google和Apple分別在Android和iOS上檢查互聯網連接的方式:嘗試訪問向您發送特定響應代碼的Web服務。如果失敗,則沒有互聯網連接。如果你有你所期望的,就有互聯網連接。如果你從你的期望得到不同的迴應,那麼中間有一個Captive門戶。 –

+0

@MarkF檢查出這個類似問題的接受答案:http://stackoverflow.com/questions/6493517/detect-if-android-device-has-internet-connection –

相關問題