【问题标题】:Android: How to launch WiFi through codeAndroid:如何通过代码启动 WiFi
【发布时间】:2012-04-20 06:30:53
【问题描述】:

我想制作一个简单的应用程序来检测 wifi 网络,并在选择网络后启动(连接)到所选网络。

我已经为检测阶段编写了代码,但是我如何在 onItemClick() 中连接到选定的网络。 请建议代码。

【问题讨论】:

  • 您想选择带有 wifi 网络列表的特定 wifi 网络吗?如果是的话,试试this
  • 如果您觉得我的回答有帮助,请标记为回答。

标签: android android-wifi onitemclick


【解决方案1】:

您可以使用 WifiManager 来做到这一点。从系统中获取Wifi服务,检查wifi是打开还是关闭,然后打开/关闭。

private WifiManager wifiManager;
@Override
public void onCreate(Bundle bund) {
  wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);
  if(wifiManager.isWifiEnabled()){
    wifiManager.setWifiEnabled(false);
  }else{
    wifiManager.setWifiEnabled(true);
  }
}

记得也要添加权限

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

【讨论】:

    【解决方案2】:

    Android 完全支持 WiFi 连接。主要组件是系统提供的 WiFiManager。像往常一样,我们通过 getSystemServices() 调用当前上下文来获取它。

    一旦我们有了 WiFiManager,我们就可以以 WiFiInfo 对象的形式向它询问当前的 WIFI 连接。我们还可以通过 getConfiguredNetworks() 请求所有当前可用的网络。这给了我们 WifiConfigurations 的列表。

    在这个例子中,我们还注册了一个广播接收器来执行新网络的扫描

    WiFiDemo.java

    package com.example;
    
    import java.util.List;
    
    import android.app.Activity;
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.IntentFilter;
    import android.net.wifi.WifiConfiguration;
    import android.net.wifi.WifiInfo;
    import android.net.wifi.WifiManager;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    public class WiFiDemo extends Activity implements OnClickListener {
        private static final String TAG = "WiFiDemo";
        WifiManager wifi;
        BroadcastReceiver receiver;
    
        TextView textStatus;
        Button buttonScan;
    
        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
    
            // Setup UI
            textStatus = (TextView) findViewById(R.id.textStatus);
            buttonScan = (Button) findViewById(R.id.buttonScan);
            buttonScan.setOnClickListener(this);
    
            // Setup WiFi
            wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
    
            // Get WiFi status
            WifiInfo info = wifi.getConnectionInfo();
            textStatus.append("\n\nWiFi Status: " + info.toString());
    
            // List available networks
            List<WifiConfiguration> configs = wifi.getConfiguredNetworks();
            for (WifiConfiguration config : configs) {
                textStatus.append("\n\n" + config.toString());
            }
    
            // Register Broadcast Receiver
            if (receiver == null)
                receiver = new WiFiScanReceiver(this);
    
            registerReceiver(receiver, new IntentFilter(
                    WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
            Log.d(TAG, "onCreate()");
        }
    
        @Override
        public void onStop() {
            unregisterReceiver(receiver);
        }
    
        public void onClick(View view) {
            Toast.makeText(this, "On Click Clicked. Toast to that!!!",
                    Toast.LENGTH_LONG).show();
    
            if (view.getId() == R.id.buttonScan) {
                Log.d(TAG, "onClick() wifi.startScan()");
                wifi.startScan();
            }
        }
    
    }
    

    WiFiScanReceiver.java

    包 com.example;

    import java.util.List;
    
    import android.content.BroadcastReceiver;
    import android.content.Context;
    import android.content.Intent;
    import android.net.wifi.ScanResult;
    import android.net.wifi.WifiManager;
    import android.util.Log;
    import android.widget.Toast;
    
    public class WiFiScanReceiver extends BroadcastReceiver {
      private static final String TAG = "WiFiScanReceiver";
      WiFiDemo wifiDemo;
    
      public WiFiScanReceiver(WiFiDemo wifiDemo) {
        super();
        this.wifiDemo = wifiDemo;
      }
    
      @Override
      public void onReceive(Context c, Intent intent) {
        List<ScanResult> results = wifiDemo.wifi.getScanResults();
        ScanResult bestSignal = null;
        for (ScanResult result : results) {
          if (bestSignal == null
              || WifiManager.compareSignalLevel(bestSignal.level, result.level) < 0)
            bestSignal = result;
        }
    
        String message = String.format("%s networks found. %s is the strongest.",
            results.size(), bestSignal.SSID);
        Toast.makeText(wifiDemo, message, Toast.LENGTH_LONG).show();
    
        Log.d(TAG, "onReceive() message: " + message);
      }
    
    }
    

    这个例子的布局文件相当简单。它有一个 TextView 包裹在 ScrollView 中用于滚动。

    /res/layout/main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
      android:orientation="vertical" android:layout_width="fill_parent"
      android:layout_height="fill_parent">
    
      <Button android:layout_width="wrap_content"
        android:layout_height="wrap_content" android:id="@+id/buttonScan"
        android:text="Scan"></Button>
      <ScrollView android:id="@+id/ScrollView01"
        android:layout_width="wrap_content" android:layout_height="wrap_content">
        <TextView android:layout_width="fill_parent"
          android:layout_height="wrap_content" android:id="@+id/textStatus"
          android:text="WiFiDemo" />
      </ScrollView>
    
    </LinearLayout>
    

    AndroidManifest.xml文件,记得添加使用WiFi的权限:

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

    【讨论】:

      【解决方案3】:

      也许你可以对现有的Answer's 做类似的事情

      WifiConfigurations 将帮助您做到这一点。

      希望对你有所帮助。

      【讨论】:

        猜你喜欢
        • 2012-05-13
        • 2011-03-31
        • 1970-01-01
        • 1970-01-01
        • 2021-09-27
        • 1970-01-01
        • 2016-02-21
        • 1970-01-01
        • 2013-04-09
        相关资源
        最近更新 更多