我正在使用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的新手。
答案 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;
}
这将使线程每分钟都运行一次。如果有人有更好的答案,请发帖