Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取WiFi状态并使用广播接收器对其进行操作_Java_Android - Fatal编程技术网

Java 获取WiFi状态并使用广播接收器对其进行操作

Java 获取WiFi状态并使用广播接收器对其进行操作,java,android,Java,Android,我正在我的应用程序中使用broad cast receiver类,我正在broad cast receiver类中的WiFi状态下进行操作。如果WiFi断开或连接,则执行一些操作。当wifi连接时,显示正确的消息,但当wifi断开连接时,不显示wifi断开连接消息,而是显示else语句 这是我的广播接收机类代码 public class WifiReceiver extends BroadcastReceiver { private static final String TAG = "Netw

我正在我的应用程序中使用broad cast receiver类,我正在broad cast receiver类中的WiFi状态下进行操作。如果WiFi断开或连接,则执行一些操作。当wifi连接时,显示正确的消息,但当wifi断开连接时,不显示wifi断开连接消息,而是显示else语句

这是我的广播接收机类代码

public class WifiReceiver extends BroadcastReceiver {
private static final String TAG = "NetworkStateReceiver";

@Override
public void onReceive(final Context context, final Intent intent) {
    Log.d(TAG, "Network connectivity change");


        if (intent.getExtras() != null) {
            final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            final NetworkInfo ni = connectivityManager.getActiveNetworkInfo();
            //check if wifi is connected
            if (ni != null && ni.isConnectedOrConnecting()) {
                Log.i(TAG, "Network " + ni.getTypeName() + " connected");
        }
        else if (intent.getBooleanExtra(ConnectivityManager.EXTRA_NO_CONNECTIVITY, Boolean.FALSE)) {
        Log.i(TAG, "wifi disconnected");
            }
            else {
        Log.i(TAG, "Network  else state");
            }
        }
在舱单上登记

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

一个工作示例

@Override
    public void onReceive(Context context, Intent intent)
    {
        String action = intent.getAction();

if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION))
{
    WifiManager manager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE);
    NetworkInfo networkInfo = intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
    NetworkInfo.State state = networkInfo.getState();

    if(state == NetworkInfo.State.CONNECTED)
    {
        Log.d("Tag","Connected");
    }

    if(state == NetworkInfo.State.DISCONNECTED)
    {
        if(manager.isWifiEnabled())
        {
             Log.d("Tag","Disconnected");
        }
    }
    }

   }
创建Wifi对象

wifi = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
然后


为什么要否决投票?有什么原因吗?谢谢@XäiñUl Abideen。但我需要wifi断开连接条件。没有微粒来检查网络是否与wifi或数据断开。我需要wifi断开连接条件。我正在节省wifi断开连接的时间,但问题是当wifi连接时,它首先调用其他条件,然后调用if条件。尝试使用反向条件,但如果wifi连接和wifi断开,我需要这两个条件。不工作。我已经试过你的代码了。它没有打印任何条件
 if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION))
    {
 if (wifi.isWifiEnabled()) {
        //perform action
    }
    else {
        //perform action
    }