2014-02-20 48 views
0

我正在開發一個電源控制Widget,其中我有一個ImageButton,當按下切換Wifi並更改按鈕的src以進行可視化確認時。問題是我不知道如何檢測Wifi何時被禁用或從其他來源啓用,如從設置或其他電源控制小部件,並相應地更改按鈕的src。例如,如果我在主屏幕上同時使用了我的Widget和Android默認Power Control Widget,並且使用我的Widget禁用了WIFI,那麼Android默認Power Control Widget的WIFI按鈕也會被禁用,不過,如果我使用股票電力控制小部件禁用WiFi,我的wifi按鈕的src不會改變,仍然表示wifi已啓用。如何捕捉WiFi狀態變化事件

任何想法讚賞,因爲我找不到解決方案。

編輯: 這裏是我的廣播接收器:

public void onReceive(Context context, Intent intent) { 

    RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget); 
    wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
    int state = wifi.getWifiState(); 
    switch(state) { 
     case WifiManager.WIFI_STATE_DISABLED: 
      remoteViews.setImageViewResource(R.id.widget_wifi, R.drawable.ic_widget_wifi_off); 
      break; 
     case WifiManager.WIFI_STATE_ENABLED: 
      remoteViews.setImageViewResource(R.id.widget_wifi, R.drawable.ic_widget_wifi_on); 
      break; 
     case WifiManager.WIFI_STATE_DISABLING: 
      remoteViews.setImageViewResource(R.id.widget_wifi, R.drawable.ic_widget_wifi_off); 
      break; 
     case WifiManager.WIFI_STATE_ENABLING: 
      remoteViews.setImageViewResource(R.id.widget_wifi, R.drawable.ic_widget_wifi_on); 
      break; 
    }   


} 

而且在AndroidManifest.xml中:

<receiver 
android:name="WidgetIntentReceiver" 
    android:label="widgetBroadcastReceiver" > 
    <intent-filter>    
     <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
     <action android:name="android.net.wifi.STATE_CHANGE" />    
</intent-filter> 

和權限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> 
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> 
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission> 
<uses-permission android:name="android.permission.WRITE_SETTINGS"></uses-permission> 
+0

如果有幫助,http://stackoverflow.com/questions/9031952/wifi-connection-changed-action-in-android?rq=1 –

回答

1

通過在清單中註冊BroadcastReceiver來收聽系統廣播,例如ACCESS_NETWORK_STATEACCESS_WIFI_STATE

要收聽這些系統廣播,您需要在清單中聲明的​​權限。請參閱this文檔瞭解廣播操作以及所需的相應權限。

我希望你知道如何實現一個廣播接收器。

+0

我已經有了一個廣播接收器。我編輯了我的問題以包含onCreate方法。不應該這樣工作嗎?根據我的理解,當wifi狀態發生變化時,我有意圖過濾器「android.net.wifi.WIFI_STATE_CHANGED」應該會觸發廣播接收器的onCreate方法。 – Timu

+0

它應該工作,我覺得沒有理由不工作。你是否添加了斷點或日誌命令來檢查實際上是否調用了'onRecieve'。 – Supreethks

+0

我讓它工作。 'onReceive'方法被調用,但問題在於,在開關情況下更改圖像後,我沒有在AppWidgetProvide類中推送窗口小部件更新。謝謝你指出我朝着正確的方向。 – Timu

0
public boolean checkOnlineState() { 
     ConnectivityManager CManager =(ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); 
     NetworkInfo NInfo = CManager.getActiveNetworkInfo(); 
     if (NInfo != null && NInfo.isConnectedOrConnecting()) { 
      return true; 
     } 
     return false; 
    } 
+0

好的,所以這是一個小部件,我應該在哪裏調用這個方法 ?此外,這不是檢查設備是否連接/已連接到網絡?我對此不感興趣。我只想知道何時從我的小部件中獲取其他來源的啓用/禁用。 – Timu