2014-05-15 31 views
0

我正在制作一个小型项目,其中我将无线网络设置为禁用,如果电池电量低于30%。但如果用户再次启用wifi,我不希望它再次被禁用。 我做了整个服务类 我的代码是... 请给任何建议。您的建议对我来说是非常宝贵的..如果我想要一个条件不被检查两次,该怎么办?

public class BatteryService extends Service 
    boolean checkwifi; 
    WifiManager mainWifi; 

    public void onCreate() { 
      // TODO Auto-generated method stub 
      super.onCreate(); 
      checkwifi = true; 
      mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);  
     } 


    if (level <= 30 && !isCharging) { 
        tts.speak(" Battery LOw Connect Phone to Charger", 
          TextToSpeech.QUEUE_FLUSH, null); 
        if (checkwifi) { 
         mainWifi.setWifiEnabled(false); 
         bt.disable(); 
         closemobiledata(); 
         checkwifi = false; 
        } 
} 

更新1:

我发现这个问题,这个问题是服务一次又一次地开始 做什么,这样的服务一定不能一次又一次启动

public class BatteryService extends Service 
     boolean checkwifi; 
     WifiManager mainWifi; 

     public void onCreate() { 
       // TODO Auto-generated method stub 
       super.onCreate(); 
       Toast.makeText(getApplicationContext(), "Service created", Toast.LENGTH_SHORT).show(); 
       checkwifi = true; 
       mainWifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);  
      } 


     if (level <= 30 && !isCharging) { 
         tts.speak(" Battery LOw Connect Phone to Charger", 
           TextToSpeech.QUEUE_FLUSH, null); 
         if (checkwifi) { 
          mainWifi.setWifiEnabled(false); 
          bt.disable(); 
          closemobiledata(); 
          checkwifi = false; 
         } 
    } 
+1

你需要的是一个广播接收器得到通知时,网络连接类型changes..see如下:http://stackoverflow.com/questions/10733121/broadcastreceiver-when-wifi-or -3G网络状态改变的 –

回答

0

android.net.wifi.WIFI_STATE_CHANGED事件创建接收器。如果在禁用它之后wifi被激活,请使用SharedPreferences将userEnabledWifi设置为true。在您的服务检查userEnabledWifi之前,您禁用WiFi。如果电池再次高于%30,则将userEnabledWifi重置为false,这样,如果电池电量再次低于%30,您可以禁用WiFi。

0

有什么区别?您应该能够在服务中为电池事件注册一个接收器,就像您进行一项活动一样。例如:

private final BroadcastReceiver mBatInfoReceiver = new BroadcastReceiver(){ 
@Override 
public void onReceive(Context arg0, Intent intent) { 
    int rawLevel = intent.getIntExtra("level", -1); 
    int scale = intent.getIntExtra("scale", -1); 
    int status = intent.getIntExtra("status", -1); 

if (rawLevel <= 30 && !isCharging) { 
        tts.speak(" Battery LOw Connect Phone to Charger", 
          TextToSpeech.QUEUE_FLUSH, null); 
        if (checkwifi) { 
         mainWifi.setWifiEnabled(false); 
         bt.disable(); 
         closemobiledata(); 
         checkwifi = false; 
        } 
     // Do something 
    } 
}; 

public void onCreate() { 
    registerReceiver(this.mBatInfoReceiver, new IntentFilter(Intent.ACTION_BATTERY_CHANGED)); 
} 

public void onDestroy() { 
    unregisterReceiver(this.mBatInfoReceiver); 
} 
相关问题