2014-05-15 75 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); 
} 
相關問題