Android检查WIFI状态(断开连接或用户更改WIFI)

时间:2015-06-09 14:24:36

标签: java android service connection wifi

如果WIFI连接断开/断开或者用户实际更改了WIFI网络,我有没有办法标记?

我需要我的应用程序: 如果XYZ断开连接(FLAG 1)或掉线,则连接到WIFI XYZ然后重新连接到XYZ。 但是用户是否更改为另一个wifi BTOpen(FLAG 2)然后允许连接和停止我的服务。 如果用户再次连接到XYZ,则再次启动循环。

到目前为止我得到的是:

    <!-- WIFI Receiver -->
    <receiver android:name=".ReceiverWifi" >
        <intent-filter>
            <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
            <action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
        </intent-filter>
    </receiver>
    <service android:name=".ServiceWifiMonitor" />
    <receiver android:name=".ServiceController" >
        <intent-filter >
            <action   android:name="android.intent.action.BOOT_COMPLETED" />
            <category android:name="android.intent.action.QUICKBOOT_POWERON" />
        </intent-filter>
    </receiver>

BroadcastReceiver:

    myApplication = (MyApplication) context.getApplicationContext();
    conManager  = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
    wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
    networkInfo = conManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);


    boolean isConnected = networkInfo != null && networkInfo.isConnected();
    int reconnectedCount = myApplication.getReconnectedCount();


    if (wifiManager.isWifiEnabled()) {


        if("android.net.conn.CONNECTIVITY_CHANGE".equals(intent.getAction())) {


            //Start and Stop Service
            if(myApplication.isReconnect()) startServiceWifiMonitor(); else stopServiceWifiMonitor();



            if (isConnected) {
                //There is a WIFI Connection
                myApplication.setConnectedWifi(NetworkUtil.getCurrentSSID(context));
                myApplication.setWifiStatus("connected");




                if (NetworkUtil.isConnectedToXYZ(context)) {
                    startServiceWifiMonitor();

                    if(pref.getisFirstTime()) 
                    {
                        myApplication.setWifiByChoise("XYZ");
                        pref.setisFirstTime(false);
                    }
                    else { myApplication.setisReconnect(true); }
                }
                else {
                    //Connected to different NetWork
                    if(myApplication.isReconnect() && NetworkUtil.isXYZAvailable(context)) 
                    {
                        //ReConnect to XYZ
                        NetworkUtil.connectToXYZ(context);
                        myApplication.setReconnectedCount(reconnectedCount++);
                    }
                    else { resetValues("AAAA"); }
                }


            }//end if
            else 
             {
                if(NetworkUtil.isXYZAvailable(context) && myApplication.getWifiByChoise().equals("XYZ")) 
                {
                    NetworkUtil.connectToXYZ(context);
                    myApplication.setReconnectedCount(reconnectedCount++);
                }
                else { resetValues(""); }
            }
        }//end CONNECTIVITY_CHANGE

服务监控:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    Log.i(TAG, "onStartCommand > Received start id " + startId + ": " + intent);

        objHandler.postDelayed(mTasks, 1000);

    return START_STICKY;
}//end onStartCommand



private Runnable mTasks = new Runnable() {
    public void run() {

        if(myApplication.getWifiByChoise().equals("XYZ") && NetworkUtil.isXYZAvailable(context)) {              
            try
             {
                //Get the numbers of Reconnection
                int count = myApplication.getReconnectedCount();

                if(!NetworkUtil.isWifiConnected(context)) 
                {   

                    NetworkUtil.connectToXYZ(context);
                    myApplication.setisReconnect(true);
                    myApplication.setReconnectedCount(count++); 
                }

                if(!NetworkUtil.isConnectedToXYZ(context)) 
                {   

                    NetworkUtil.connectToXYZ(context);
                    myApplication.setisReconnect(true);
                    myApplication.setReconnectedCount(count++);
                }
            } catch (Exception e) {e.printStackTrace();}
        }
        else { stopSelf(); }
        int ms_interval = 3000;
        objHandler.postDelayed(mTasks, ms_interval);
    }
};//end Runnable mTasks 

我的应用程序的问题是: 它崩溃了设备,似乎它耗尽了所有的记忆内存。 有时与wifi XYZ断开它不会再连接,如果用户改为另一个wifi,它将不允许连接。

我非常感谢你的帮助。谢谢。

0 个答案:

没有答案