5

ワイヤレス状態でリッスンするようにリスナーを設定したいのですが、誰かが私のコードを手伝ってくれますか

import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;

...

 TelephonyManager wTelephonyManager;

...

     wTelephonyManager=(TelephonyManager)getSystemService(Context.WIFI_SERVICE);
    wTelephonyManager.listen(new PhoneL(),PhoneStateListener.LISTEN_DATA_CONNECTION_STATE);
    connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);

//これは、wifi の変更をリッスンするために使用するイベントです。上記のコードはすべて onCreate にあります{}

class PhoneL extends PhoneStateListener

{   






    public void onWifiStateChanged(int state, String nesto)
    {
         mWifi = connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
            //mWifi.isConnectedOrConnecting()
             if(mWifi.isConnectedOrConnecting())
             {
                 Toast.makeText(WifiActivity.this,"Ima WIFI",Toast.LENGTH_LONG).show();     
             }
             else
             {
                 Toast.makeText(WifiActivity.this,"! NEMA WIFI",Toast.LENGTH_LONG).show(); 
             }


    }

}

// Wi-Fi の状態をリッスンし、Wi-Fi が接続されているかどうか、または 3g/4g を介したデータ パケット トラフィックを有効にしたい場合は接続しているかどうかを確認するリスナーの作成を手伝ってくれませんか

4

3 に答える 3

6

私もその問題に遭遇しました、これが私がそれを解決した方法です。

私のアクティビティonCreate(..)で

this.registerReceiver(mWifiStateChangedReceiver,new IntentFilter(WifiManager.WIFI_STATE_CHANGED_ACTION));

さらに、この方法でメンバー'mWifiStateChangedReceiver'を作成しました

private BroadcastReceiver mWifiStateChangedReceiver = new BroadcastReceiver()
{

    @Override
    public void onReceive(Context context, Intent intent)
    {
        // TODO Auto-generated method stub

        int extraWifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN);

        switch (extraWifiState)
        {
        case WifiManager.WIFI_STATE_DISABLED:
        case WifiManager.WIFI_STATE_DISABLING:
            enableUI(false);
            break;
        case WifiManager.WIFI_STATE_ENABLED:
            ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
            while(conMan.getActiveNetworkInfo() == null || conMan.getActiveNetworkInfo().getState() != NetworkInfo.State.CONNECTED)
            {
                try
                {
                    Thread.sleep(500);
                } catch (InterruptedException e)
                {
                    e.printStackTrace();
                }
            }
            update();
            enableUI(true);
            break;
        case WifiManager.WIFI_STATE_ENABLING:
            break;
        case WifiManager.WIFI_STATE_UNKNOWN:
            break;
        }

    }
};

ご覧のとおり、WifiManager.WIFI_STATE_ENABLEDWiFiが有効になっているからといって、ネットワークが接続されているとは限らないため、ネットワークが実際に接続されているかどうかをさらにテストします。少なくともこれは私の推測でした。そのため、ネットワークが実際に接続されるまで待っています。

于 2012-02-27T10:56:17.023 に答える
2

信号強度を聞きたい場合は、次の場所でも聞くことができます。

WifiManager.RSSI_CHANGED_ACTION

于 2016-05-18T14:00:58.800 に答える
-2

アンドロイドシステムは、接続されていないData Trafficときに切り替えるように要求しWiFiますが、問題があります。
画面がオフのときにWiFiをオフにすると、WiFiと3Gネットワ​​ークの間で常に変化し、バックグラウンドでデータを送信するアプリを選択した場合、無制限のデータプランがない場合はコストのかかるデータ接続が使用されます。
もう1つの問題は、WiFi信号がそれほど強くない地域にいる場合、常にデータトラフィックに変化し、ブラウジングなどで問題が発生することです。
3番目の問題はバッテリーです。私が聞いたところによると、データよりもWiFi接続を使用する方が(バッテリーに関して)優れています。1つのアドオンを使用すると、画面がオフのときにWiFiがオフになりません(私もそうします)。 Wi-Fiをオフにしてからオンにするのは、常にオンにするのが最もコストがかかる(バッテリー)ためです。したがって、Androidシステムに任せてください。

于 2012-03-12T17:09:30.397 に答える