ネットワーク状態が変化するたびにトースト メッセージを表示する必要があるダイナミック ブロードキャスト レシーバーをメイン アクティビティに設定しています。オンラインに接続し、アプリケーションを実行すると、「オンラインです!」というメッセージが表示されます。トースト メッセージが表示されたら、ラップトップでインターネットをオフにし、メイン アクティビティに戻ると、同じように「オンラインです!」というメッセージが表示され続けます。トースト。ログステートメントを確認していますが、NetworkInfo オブジェクトは、明らかにオンラインではないのに、実際にオンラインであることを返し続けています。エミュレータと電話でこれを試しました。誰かが理由を知っていますか?
これは、ネストされたブロードキャスト レシーバー クラス、インテント フィルター、およびトーストを実行するメソッドを含むメイン アクティビティです。
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();
}
}
}}