Search code examples
androidandroid-manifestandroid-wifi

Unable to listen to android wi-fi manager's state?


I am having some trouble with BroadCast receiver for checking the Wi-fi state. Could you please help?

This is my manifest file.

<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>

And this is the 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();
        }
    }
}

I am unsure where am I making my mistake. Any input would be appreciated.
I am not getting any errors just that the log file doesn't show the required message.


Solution

  • You have had not added the parameters for the intent filter, the final manifest should look like this

    <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>
    

    Hope this helps.