Не удалось получить события, связанные с сетью - PullRequest
6 голосов
/ 13 января 2012

Я зарегистрировался на 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 ]

4 голосов
/ 25 января 2012

Это работает для меня:

<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());
  }
}

и не забудьте зарегистрировать все сетевые разрешения.

3 голосов
/ 22 января 2012

попробуйте использовать файл манифеста

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

класс MyNetworkStateReceiver должен расширяться BroadcastReceiver

0 голосов
/ 24 января 2012

Вы также можете попытаться получить разрешения для блокировки Интернета, 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 (устройство должно быть рутировано).Но с использованием этих разрешений у меня нет проблем.

0 голосов
/ 23 января 2012

Похоже, проблема более низкого уровня - поиск ошибки обнаруживает несколько форумов по взлому ПЗУ и их неисправности Wi-Fi. Что вы тестируете? Попробуйте протестировать на другом устройстве или эмуляторе. (Я полагаю, вы пытались перезагрузить свой :))

Кроме того, убедитесь, что вы отменили регистрацию получателя, когда ваша деятельность / служба разрушена (возможно, это как-то связано с ошибкой соединения)

PS Я знаю, что вы сказали, что вы делаете, но все равно дважды проверьте, у вас есть

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

в вашем манифесте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...