1

ネットワークが利用可能かどうかを確認するときに一貫した結果を得るのにいくつかの問題があります。

このコードスニペットをクラスAppPreferences内で使用して、ネットワークの可用性を確認します。

/**
     * @return the networkAvailable
     */
    public boolean isNetworkAvailable() {
        connectionManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        networkAvailable = connectionManager.getActiveNetworkInfo() != null && connectionManager.getActiveNetworkInfo().isConnected();
        return networkAvailable;
    }

各実行の前に、コンテキストを次のように設定します。

timer.scheduleAtFixedRate(

                new TimerTask() {

                    public void run() {

                        appPreferences.setContext(getBaseContext());

                        if (appPreferences.isNetworkAvailable()){

                            // perform task

                        }

                    }
                },
                0,
                UPDATE_INTERVAL);

同じロジックを実行するonReceive呼び出しがあり、それでもこのチェックが失敗するため、バックグラウンドスレッドに関連付けられていないことはわかっています。

これは主に、セルラーデータ接続とwifiの間、またはその逆に移動するときに発生するようです。更新しても、起動したコンテキストが残っているようです。

誰かがここで問題になる可能性があることを知っていますか?

4

1 に答える 1

1

アクティブなネットワーク情報は、サービス/アクティビティ/受信者のコンテキストが開始されたときの状態のままであるように見えます。したがって、ネットワーク上で起動し、後で切断した場合(つまり、3GからWifiに移動して3G接続を切断した場合)、最初のアクティブな接続に留まり、電話がオフラインでなくてもアプリにオフラインであると認識させます。

特定の「タスク」を開始したときに関連付けられないため、代わりにgetApplicationContextを使用するのが最善の解決策のように思われます。

更新:関連するのは、Wifiに接続しているときにAndroid(特にNexus One)でアプリケーションを長期間実行する場合は、画面がスリープしているときにWifiをスリープさせないようにすることを確認してください。これは、ワイヤレスネットワークの[詳細設定]オプションで設定できます。

于 2010-07-19T19:14:43.497 に答える