6

我已登記ConnectivityManager.CONNECTIVITY_ACTION BroadcastReceiver,用於接收網絡狀態事件,但是當打開或關閉我的無線連接時,我的onReceive功能未被調用。無法接收網絡相關事件

正如在文檔中提到的,這是一個粘滯廣播接收器,當我們註冊時它會被觸發。

但是當我註冊接收器時,我沒有在我的onReceive函數中收到任何事件,可能是什麼原因?

在我的Manifest文件中,我具有訪問Internet /網絡/ Wifi連接及其狀態的所有權限。

我用下面的代碼此意向登記:

registerReceiver(mNetworkStateReceiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); 

在我logcat中,我得到以下錯誤信息註冊這個廣播接收器:

01-01 00:05:29.804: ERROR/WifiHW(1305): Unable to open connection to supplicant on "/data/system/wpa_supplicant/wlan0": Connection refused 

可能是什麼原因?有什麼方法可以查明BroadcastReceiver是否正確註冊?

謝謝。

+0

如果您通過清單註冊接收器,您是否看到相同的問題?你的wifi連接可用於數據傳輸嗎?是否有可能將''onReceive()''用於'mNetworkStateReceiver'的代碼發佈? – 2012-01-22 00:42:20

+0

我從來沒有試過通過清單文件註冊它,我會先嚐試它! – User7723337 2012-01-23 11:17:12

+0

你可以考慮獎賞賞金嗎?其實它會徒然 – Sameer 2012-01-25 09:25:47

回答

4

這個工作對我來說:

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

<receiver android:name=".receiver.ConnectivityReceiver"> 
    <intent-filter> 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 

代碼:

public class ConnectivityReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Log.d(ConnectivityReceiver.class.getSimpleName(), "action: " 
       + intent.getAction()); 
    } 
} 

,不要忘記註冊的所有網絡權限。

+0

」正確!或者我們是否需要添加其他許可? – Shravan 2015-05-06 05:43:17

+0

你可以看看這個http://stackoverflow.com/q/30062487/3742271? – Shravan 2015-05-06 05:44:58

3

嘗試使用清單文件

<receiver android:name=".MyNetworkStateReceiver" > 
    <intent-filter > 
     <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
    </intent-filter> 
</receiver> 

MyNetworkStateReceiver應該擴展BroadcastReceiver

+0

我是通過JAVA代碼做的,不需要在manifest文件中加這個。 – User7723337 2012-01-23 11:15:48

0

看起來像一個低級別的問題 - 谷歌搜索錯誤顯示多個ROM黑客論壇和自己的無線網絡連接故障。你在測試什麼?嘗試在其他設備或模擬器上測試。 (我假設你已經嘗試過重新啓動你的:))

另外,確保您註銷,當你的活動/服務被破壞(也許這事做與連接錯誤)

PS我知道你的接收器說你這樣做,但還是仔細檢查你的清單中是否有

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

0

您也可以嘗試獲取Internet,WIFI和多播鎖定的權限,請嘗試將這些權限添加到權限。

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

我需要使用這些權限在房子應用程序,我已經建立了使用,不僅用於發送和接收網絡數據的無線網絡,但是任何類型的網絡適配器(LAN,RADIO),我可以過濾通過C中的SDK(設備必須被植入)。但使用這些權限我沒有問題。