2012-02-24 75 views
10

我試圖註冊一個Wifi BroadcastReceiver,以便在更改時獲取wifi狀態。但到目前爲止,我沒有收到廣播的運氣。清單中聲明的​​BroadcastReceiver未收到廣播

<application 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" > 
    <receiver android:name=".WifiReceiver" > 
     <intent-filter> 
      <action android:name="android.net.wifi.WifiManager.WIFI_STATE_CHANGED_ACTION" /> 
      <action android:name="android.intent.action.PHONE_STATE" /> 
     </intent-filter> 
    </receiver> 

    //activity declaration here... 

</application> 

你們知道如何在清單中註冊BraodcastReceiver嗎?

我並不想註冊活動,因爲我想監控無線時候有我的應用程序是否運行,或者是wifi的狀態變化。

這是我的廣播接收器類:

public class WifiReceiver extends BroadcastReceiver { 
    private final String TAG = "WifiReceiver"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, WifiManager.WIFI_STATE_UNKNOWN); 
     String wifiStateText = "No State"; 

     switch (wifiState) { 
     case WifiManager.WIFI_STATE_DISABLING: 
      wifiStateText = "WIFI_STATE_DISABLING"; 
      break; 
     case WifiManager.WIFI_STATE_DISABLED: 
      wifiStateText = "WIFI_STATE_DISABLED"; 
      break; 
     case WifiManager.WIFI_STATE_ENABLING: 
      wifiStateText = "WIFI_STATE_ENABLING"; 
      break; 
     case WifiManager.WIFI_STATE_ENABLED: 
      wifiStateText = "WIFI_STATE_ENABLED"; 
      break; 
     case WifiManager.WIFI_STATE_UNKNOWN: 
      wifiStateText = "WIFI_STATE_UNKNOWN"; 
      break; 
     default: 
      break; 
     } 
     MyLog.d(TAG, "onReceive Broadcast > WiFiState: " + wifiStateText); 
     MyLog.d(TAG, "onReceive Broadcast > Time: " + new Date()); 
    } 
} 

我真的希望能得到一些幫助。提前致謝。

+0

看這個博客http://marakana.com/forums/android/examples/40.html – Ajay 2012-02-24 04:34:18

+0

你有沒有爲Android定義權限的所有廣播接收器.permission.ACCESS_WIFI_STATE和android.permission.CHANGE_WIFI_STATE – Ajay 2012-02-24 04:36:38

+0

@Ajay,我已經看過你提到的博客。問題就像我剛纔提到的那樣,我想在清單中註冊接收者而不是在活動中。我已經在清單中放入了許可。無論如何,謝謝你的關注Ajay。 – Zul 2012-02-24 07:00:10

回答

25

你的清單中接收機應該看起來像這樣

<receiver android:name=".WifiReceiver" > 
    <intent-filter> 
     <action android:name="android.net.wifi.WIFI_STATE_CHANGED" /> 
    </intent-filter> 
</receiver> 

也可能需要以下權限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
+0

哇..感謝@ dong221。這真的做到了。如果你不介意我問,你怎麼知道這個動作名稱必須是'android.net.wifi.WIFI_STATE_CHANGED'?你能給我任何鏈接嗎? – Zul 2012-02-24 07:18:00

+1

@Zul它在這裏被列爲一個常數值:http://developer.android.com/reference/android/net/wifi/WifiManager.html#WIFI_STATE_CHANGED_ACTION – 2014-09-15 08:14:21

0

僅僅因爲廣播是用標誌Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT發送的,這意味着你的應用程序必須在android啓動之前註冊這個接收器,它只能是系統服務。

0

我想你已經註冊的接收器就像這樣:

<receiver 
    android:name=".WiFiReciever"> 
    <intent-filter> 
     <action 
      android:name="class name with package" /> 
     <data 
      android:scheme="myscheme" /> 
    </intent-filter> 
</receiver> 
+0

'',我沒跟着你。這方面的例子? – Zul 2012-02-24 07:06:16

3
<receiver android:name=".WifiReceiver" > 
    <intent-filter android:priority="100" > 
      <action 
      android:name="android.net.wifi.WIFI_STATE_CHANGED" 
      android:enabled="true" /> 
    </intent-filter> 
</receiver> 

輸入t他高度重視,也使標誌爲真

+0

哇..感謝@ user1203673。這真的做到了。如果你不介意我問,你怎麼知道這個動作名稱必須是'android.net.wifi.WIFI_STATE_CHANGED'?你能給我任何鏈接嗎?對不起,我不能投票,我的名譽還不夠。 – Zul 2012-02-24 07:21:00

+0

屬性「enabled」給出語法錯誤。 – usman 2014-03-24 13:04:37

+0

試試這個: ' – 2016-11-24 19:08:15

0

爲我工作的最好的:

清單:

<receiver android:name="com.AEDesign.communication.WifiReceiver"> 
    <intent-filter android:priority="100"> 
     <action android:name="android.net.wifi.STATE_CHANGE" /> 
    </intent-filter> 
</receiver> 

WifiReceiver類:

public class WifiReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     NetworkInfo info = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO); 
     if(info != null) { 
      if(info.isConnected()) { 
       //Do your work. 
       //To check the Network Name or other info: 
       WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); 
       WifiInfo wifiInfo = wifiManager.getConnectionInfo(); 
       String ssid = wifiInfo.getSSID();  
      } 
     } 
    } 
} 

權限:

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
-1

這是與互聯網連接

<action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
<action android:name="android.net.wifi.WIFI_STATE_CHANGED" />     
<action android:name="android.net.wifi.STATE_CHANGE" />