3

常にリモートソケットサーバーに接続する必要があるアプリを作成しました。

BroadcastReceiver接続の変更を登録しました。Receiverが起動するたびに、アプリはサーバーから切断され、新しい接続が作成されます。ライブで接続されたソケット接続を維持するためにそれを行います。

私の電話と私がチェックした他のいくつかの電話では、それはうまく機能します。しかし、他のいくつかの電話では、モバイルプロバイダーのデータ接続に接続すると、接続に実際の変更を加えることなく、Receiverが頻繁に呼び出されることがわかりました。

接続に実際の変更があるかどうかを確認する方法はありますか?その上、なぜ受信機はそれほど頻繁に発砲するのですか?

4

1 に答える 1

1

わかりました、私は私の問題の解決策を見つけました、私がいつか他の誰かを助けることを願っています:

接続変更のための私のBroadCast受信機で:

@Override
public void onReceive(Context context, Intent intent) {
        //my Application class where i store the last known state of connectivity
    app = (AppVariables) context.getApplicationContext();
        //new network state
    networkState = ((NetworkInfo)intent.getExtras().get("networkInfo")).getState();
    if (app.getLastNetworkState().equals(State.CONNECTED) && networkState.equals(State.DISCONNECTED))
    {
        Log.i("InternetConnectivity", "Internet Status Changed: disconnected");
        if (app.getServerConnectionManager() != null)
            app.getServerConnectionManager().stopServer(false, false);
        if (app.getMainActivity() != null)
            app.getMainActivity().showReconnectDialog();
        app.setLastNetworkState(networkState);
    }
    else if (networkState.equals(State.CONNECTED))
        app.setLastNetworkState(networkState);
}
于 2012-12-23T14:20:52.053 に答える