服务继续检查WIFI在Android上使用服务一直打开

时间:2014-02-17 19:42:14

标签: android android-service android-broadcast

我正在使用WifiManager类编写服务,以检测wifi是关闭还是打开。如果关闭,我的代码会在startService上打开它。现在我有一个用例,当服务已经运行时我手动关闭wifi。我希望服务能够继续检查Wifi是否打开。如果没有打开它。我的代码如下。

public int onStartCommand(Intent intent, int flags, int startId) {
    mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    // Check for wifi is disabled
    if (mainWifi.isWifiEnabled() == false){
        // If wifi disabled then enable it
        mainWifi.setWifiEnabled(true);    
    }
    wi = mainWifi.getConnectionInfo();
    Toast.makeText(this,"network "+wi.getSSID(), Toast.LENGTH_LONG).show();
    return START_STICKY;
}

有人可以告诉我如何使这项工作。我现在看到的是,当启动服务时,我在onStartCommand中只执行一次。但是我想让它一直运行以检查并稍后执行一些广播操作。我是android的新手。

2 个答案:

答案 0 :(得分:0)

比定期检查连接信息更方便的是在BroadcastReceiver上注册android.net.wifi.WIFI_STATE_CHANGED,例如看到here,关闭wifi后,您可以从接收器启动服务

答案 1 :(得分:0)

public int onStartCommand(Intent intent, int flags, int startId) {

    running = true;
    Toast.makeText(this, " Service Started", Toast.LENGTH_SHORT).show();
    mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);

    Runnable r = new Runnable(){

        @Override
        public void run() {
            while(running){
            if (mainWifi.isWifiEnabled() == false){
                // If wifi disabled then enable it
                //Toast.makeText(getApplicationContext(), "wifi is disabled..making it enabled", 
                //Toast.LENGTH_LONG).show();
                mainWifi.setWifiEnabled(true);    
            }
            wi = mainWifi.getConnectionInfo();
            Log.i("wificheckthread","Service running"+wi.getSSID());
            try {
                Thread.sleep(60000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            }
        }
    };
    Thread t = new Thread(r);
    t.start();
    return START_STICKY;

}

这将使线程每分钟都运行一次。如果有人有更好的答案,请发帖