当我打开我的android app且没有WiFi连接时,它显示没有WiFi连接,如代码中所给

时间:2018-11-08 06:45:12

标签: android android-connectivitymanager

但是当我使用WiFi连接我的应用程序时,它仍然显示未连接WiFi,因此我必须关闭应用程序并在连接WiFi的情况下再次打开它。

if (wifimanager.setWifiEnabled(true)) {
      punchin.setOnClickListener {

          if ((conMgr.activeNetworkInfo != null) && (wifi.isAvailable == true && wifi.isConnected == true)) {

              Log.v("MAc", "mac=" + wMAC + "\n" + wbssid + "\n" + wssid)

              if ((wbssid == "") && (wssid.equals(""))
                      && conMgr.activeNetworkInfo != null && conMgr.activeNetworkInfo.isAvailable
                      && conMgr.activeNetworkInfo.isConnected) {

                  textView.text = "Connected to correct Wifi"
                  punchout.visibility = View.VISIBLE

              } else if (wbssid!="") {

                  Toast.makeText(applicationContext, "Connect To Correct Wifi", Toast.LENGTH_LONG).show()
              }
          } else {

              Toast.makeText(this, "No Wifi Connection", Toast.LENGTH_LONG).show()
          }
      }
  }

2 个答案:

答案 0 :(得分:2)

如果要监听连接更改状态,则需要添加接收器。检查下面的代码-

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        checkWifiConnectionStatus();
        registerBroadCastReceiver();
    }


    private void registerBroadCastReceiver() {
        IntentFilter intentFilter = new IntentFilter();
        intentFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
        registerReceiver(receiver, intentFilter);
    }

    private void checkWifiConnectionStatus() {
        WifiManager wifiMgr = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);

        if (wifiMgr.isWifiEnabled()) {
            WifiInfo wifiInfo = wifiMgr.getConnectionInfo();

            if (wifiInfo.getNetworkId() == -1) {
                Toast.makeText(this, "Disconnected", Toast.LENGTH_SHORT).show();
                return;
            }
            Toast.makeText(this, "Connected", Toast.LENGTH_SHORT).show();
            return;
        } else {
            Toast.makeText(this, "Disconnected", Toast.LENGTH_SHORT).show();
            return;
        }
    }

    BroadcastReceiver receiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            checkWifiConnectionStatus();
        }
    };

答案 1 :(得分:0)

在活动中注册广播接收器,并在该接收器内通过连接管理器监视连接状态,当连接状态发生变化时,该方法将调用该方法来执行任务。

static void free_envp(char **envp)
{
    free(*envp);  // note the '*'
}

并在清单中添加以下权限

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
       BroadcastReceiver  netReceiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
                boolean isConnected = activeNetwork != null && activeNetwork.isConnectedOrConnecting();
                if (isConnected) {
                    try {
                        performTask(isConnected);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                } else {
                    performTask(isConnected);
                }
            }
        };
    }



public void performTask(boolean isConnected) {
    if (isConnected) {
        Log.i("test", "connection successfull");
    } else {
        Log.i("test", "connection failed");
    }
}