私のアプリはバックグラウンドで (サービスとして) 実行されており、メッセージを送受信するために常にリモート サーバーに接続する必要があります。
このサービスは、サーバーへの接続を管理するスレッドを実行します (ソケットを使用)
インターネットの状態が変更されるたびに実行され、状態が接続されているか切断されているかを確認するインターネット接続ブロードキャストレシーバーを作成しようとしています。
私の問題は次のとおりです。Wi-Fiネットワークに接続すると、ブロードキャストレシーバーインテントが数回起動されますが、そのすべてでインターネット接続の状態はtrueです(すべての火災の間に切断はありません。つまり、ほとんどありませんソケットを使用してサーバーに接続する新しいスレッド。
インターネットの状態を正しく取得していることを確認するにはどうすればよいですか。つまり、接続が接続されている場合にのみ .isConnected() メソッドが返されるということですか?
これは私のコードです:
public void onReceive(Context context, Intent intent)
{
action = intent.getAction();
app = (AppVariables) context.getApplicationContext();
if (app.isApplicationInitilized())
{
if (action.equals(action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)))
{
networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
if (networkInfo.isConnected())
app.getServerConnectionManager().startServer();
}
else if(action.equals(ConnectivityManager.CONNECTIVITY_ACTION))
{
networkInfo = intent.getParcelableExtra(ConnectivityManager.EXTRA_NETWORK_INFO);
if(networkInfo.getType() == ConnectivityManager.TYPE_WIFI && !networkInfo.isConnected())
app.getServerConnectionManager().stopServer(false);
else if (networkInfo.getType() == ConnectivityManager.TYPE_MOBILE && !networkInfo.isConnected())
app.getServerConnectionManager().stopServer(false);
else
app.getServerConnectionManager().startServer();
}
}
}