Не удалось прослушать состояние менеджера Android Wi-Fi?

У меня возникают проблемы с приемником BroadCast для проверки состояния Wi-Fi. Не могли бы вы помочь?

Это мой файл манифеста.

<uses-permission android:name="android.permission.READ_PHONE_STATE"> </uses-permission> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"> </uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"> </uses-permission> <uses-permission android:name="android.permission.INTERNET"> </uses-permission> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".MainActivity"> <intent-filter android:name="android.net.wifi.WIFI_STATE_CHANGED"/> </receiver> </application> </manifest> 

И это MainActivity.java

 public class MainActivity extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { int state = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, -1); String msg = null; switch (state) { case WifiManager.WIFI_STATE_DISABLED: msg = "it is disabled"; break; case WifiManager.WIFI_STATE_ENABLED: msg = "it is enabled"; break; case WifiManager.WIFI_STATE_DISABLING: msg = "it is switching off"; break; case WifiManager.WIFI_STATE_ENABLING: msg = "wifi is getting enabled"; break; default: msg = "not working properly"; break; } if (msg != null) { Log.d("************%%%%%%%%wifi state ", "WIFI" + msg); Toast.makeText(context, "Wifi state is" + msg, Toast.LENGTH_LONG) .show(); } } } 

Я не уверен, где я делаю свою ошибку. Любой вход был бы оценен.
Я не получаю никаких ошибок только в том, что в файле журнала не отображается требуемое сообщение.

Вы не добавили параметры фильтра намерений, последний манифест должен выглядеть так:

 <uses-permission android:name="android.permission.READ_PHONE_STATE"> </uses-permission> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"> </uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"> </uses-permission> <uses-permission android:name="android.permission.INTERNET"> </uses-permission> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <receiver android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> </intent-filter> </receiver> </application> 

Надеюсь это поможет.

Если вы не добавили следующие разрешения, повторите попытку после их добавления.

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

Во-первых, вы должны убедиться, что вы запрашиваете разрешение на доступ для просмотра состояния WIFI. Просто сделайте так, как сказал Ануп Рокекар.

Во-вторых, я считаю, что вы ошибаетесь в использовании BroadcastReceiver. В вашем manifest.xml вы объявляете MainActivity.

 <activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> 

Поэтому MainActivy – это Activity. Кроме того, вы объявляете MainActivity как broadcastReceiver. Это незаконно. Для этого вы должны использовать автономную трансляцию. Как это:

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

Обратите внимание, что я изменил имя для broadcastReceiver и внутри узла, вы должны добавить узел <action> как указано выше.

В-третьих, создайте WifiBroadcastReceiver.java и скопируйте коды с вашего оригинального MainActivity.java. Не забудьте изменить объявление класса в public class WifiBroadcastReceiver extends BroadcastReceiver

Надеюсь, я смогу помочь. Скажите, пожалуйста, если это сработает. У меня нет компьютера под рукой; Таким образом, я не тестирую коды.

Кроме того, вам нужен новый файл MainActivity.java. Он может быть сгенерирован автоматически в Eclipse. Этот класс должен быть объявлен следующим образом: public class MainActivity extends Activity .

Добавьте это разрешение также, чтобы проверить состояние сети вашего устройства.

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

Сочетание и сравнение различных предыдущих ответов, эти фрагменты работали для меня, чтобы проверить, ЕСЛИ Я ПОДКЛЮЧЕНСЯ К WIFI NETWORK (это не говорит мне, подключен ли я к интернету):

Создать класс WifiMonitor.java

 import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.net.wifi.WifiManager; import android.util.Log; public class WifiMonitor extends BroadcastReceiver { private String TAG = "TGtracker"; @Override public void onReceive(Context context, Intent intent) { Log.e(TAG,"entered wifimonitor"); // Process the Intent here WifiManager wifi = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); if (wifi.isWifiEnabled()==true) { Log.d(TAG, "You are connected to WIFI "+wifi.getConnectionInfo()); } else { Log.e(TAG,"You are NOT connected to WIFI"); } } } 

Перейдите в свой файл манифеста и включите

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

И, наконец, поместите приемник прямо перед тегом </ application> (все еще в файле манифеста)

 <application... <receiver android:name=".WifiMonitor" android:enabled="true"> <intent-filter> <action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION" /> <action android:name="android.net.wifi.STATE_CHANGE" /> <action android:name="android.net.wifi.supplicant.CONNECTION_CHANGE" /> </intent-filter> </receiver> </application> 

При применении кода, НЕ КОПИРУЙТЕ теги <application … или </ application> в приведенном выше коде (я просто поставлю их там, чтобы вы знали, где разместить приемник).

ПРИМЕЧАНИЕ. Пожалуйста, исправьте свою MainActivity, чтобы продлить действие, а не BroadcastReceiver.

Для меня изменения в AndroidManifiest.xml не помогли. У меня та же проблема, приложение внезапно остановилось.

Я использовал registerReceiver в основном действии, и он работает 🙂 Для меня WifiStateTester – это класс, который простирается от BroadcastReceiver.

  WifiStateTester wfs= new WifiStateTester(); IntentFilter iFilter= new IntentFilter(); iFilter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION); iFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION); this.registerReceiver(wfs, iFilter); 

Другим другим, что я сделал, является то, что в методе onReceiver я непосредственно проверял статус wifi.

Intereting Posts
ViewPager.setOffscreenPageLimit (0) не работает должным образом Можно ли использовать сценарии lua в проекте java android? Android получает текущую активность для полиморфного метода Как остановить ASyncTask от сбоев, когда моя деятельность изменяется или уничтожается? Android, как исправить ориентацию камеры Полностью защищен ли обмен файлами Bluetooth? Как я могу заставить Android MediaController появиться из макета xml? Где «Создать тестовый модуль» в Android Studio? Почему мое меню редактирования / вставки EditText находится под EditText? Как изменить всплывающее окно z-порядка? Для платформы отсутствует модуль Cordova – check_reqs. Пропуск Передача параметров в BroadcastReceiver Android Player Player с использованием NDK, OpenGL ES и FFmpeg Twowayview автоматически добавляет отступы при прокрутке Как проверить, является ли другое приложение в системе подлинным? Класс широковещательного приемника и метод registerReceiver