Не удалось получить события, связанные с сетью
Я зарегистрировался в ConnectivityManager.CONNECTIVITY_ACTION
BroadcastReceiver, для получения событий состояния сети, но мой onReceive
функция не вызывается, когда я включаю или выключаю соединение Wi-Fi.
Как упоминалось в документации, это Sticky Broadcast Receiver, который срабатывает, когда мы регистрируем его.
Но я не получаю никаких событий в моем onReceive
функция, когда я регистрируюсь для этого приемника, что может быть причиной?
В моем файле манифеста у меня есть все разрешения для доступа к Интернету / сети / соединениям Wi-Fi и их состояниям.
Я регистрируюсь с этим намерением, используя следующий код:
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 или нет?
Благодарю.
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());
}
}
и не забудьте зарегистрировать все сетевые разрешения.
Попробуйте это с помощью файла манифеста
<receiver android:name=".MyNetworkStateReceiver" >
<intent-filter >
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
класс MyNetworkStateReceiver
должен продлить BroadcastReceiver
Вы также можете попытаться получить разрешения для блокировки Интернета, 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"/>
Я должен использовать это разрешение для встроенного приложения, которое использует не только WiFi для отправки и получения сетевых данных, но и любой тип сетевого адаптера (LAN, RADIO), который я могу отфильтровать через SDK в C (Device должен быть укоренен). Но с использованием этих разрешений у меня нет проблем.
Похоже, проблема более низкого уровня - поиск ошибки обнаруживает несколько форумов по взлому ПЗУ и их неисправности Wi-Fi. Что вы тестируете? Попробуйте протестировать на другом устройстве или эмуляторе. (Я полагаю, вы пытались перезагрузить свой:))
Кроме того, убедитесь, что вы отменили регистрацию получателя, когда ваша деятельность / служба разрушена (возможно, это связано с ошибкой соединения)
PS Я знаю, что вы сказали, что вы делаете, но все равно проверьте, есть ли у вас
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
в вашем манифесте.