android6.0 wifi连接

本文介绍了在Android 6.0中与之前版本相比,获取和连接WiFi热点的差异。主要变化包括获取权限方式的改变,需要请求新的权限,并且在某些情况下需要开启GPS才能获取热点。同时,详细解析了连接WiFi的步骤和配置方法。
摘要由CSDN通过智能技术生成

Android6.0Wifi连接过程基本和之前的版本一致,但是,在获取附近热点的时候,却出现了一些差别,这差别主要包括获取权限的方式发生了改变,以及getScanResults这个函数有点怪异的行为...

1.android6.0之前的版本获取附近的wifi热点

1.1打开和关闭wifi

setWifiEnabled(true/false);

1.2扫描附近热点

startScan();之后,接受WifiManager.SCAN_RESULTS_AVAILABLE_ACTION的广播会触发,在这个广播中调用getScanResults()方法可以获得一个List<ScanResult>,它里面的每一个条目就是一个可连接的热点。

1.3代码

<span style="font-family:SimSun;font-size:14px;background-color: rgb(255, 255, 255);">public class MainActivity extends AppCompatActivity {
    WifiManager wifi;
    int size = 0;
    List<ScanResult> results;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        if (wifi.isWifiEnabled() == false)
        {
            Toast.makeText(getApplicationContext(), "wifi is disabled..making it enabled", Toast.LENGTH_LONG).show();
            wifi.setWifiEnabled(true);
            Log.d("hello","wifi enabled");
        }
        wifi.startScan();
        registerReceiver(new BroadcastReceiver()
        {
            @Override
            public void onReceive(Context c, Intent intent)
            {
                results = wifi.getScanResults();
                size = results.size();
                for(int i=0;i<size;i++){
                    Log.d("hello",results.get(i).toString());
                }
            }
        }, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
    }
}</span>
这样就可以打印出所有的可连接wifi信息。

总结来说第一步:setWifiEnabled(true);第二步:startScan();

2.android6.0获取wifi热点

然而同样的问题在android6.0中确实不可以的。原因有两个:

第一:没有权限

android6.0访问wifi新增了两个权限:

<span style="font-family:SimSun;font-size:14px;background-color: rgb(255, 255, 255);"><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /></span>

android6.0之前,这两个权限在AndroidMenifest文件中声明就可以了,但是android6.0中,又增加了运行时权限。运行是权限这里不多说,总之,这两个权限是要运行时获取的,在Menifest文件中声明是行不通的。当然,为了不那么麻烦,你可以把targetSdkVersion 改为23以下,这样就不存在运行时权限的问题了。如果你不想这么做,那么不妨试试android6.0的运行时权限:
要在Android中实现WiFi的扫描和连接,可以使用以下步骤: 1. 添加权限:在AndroidManifest.xml文件中添加以下权限: ``` <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET"/> ``` 2. 获取WiFiManager:使用WiFiManager类获取系统的WiFi服务。 ``` WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); ``` 3. 扫描WiFi:使用WiFiManager类的startScan()方法扫描周围的WiFi网络。 ``` wifiManager.startScan(); ``` 4. 获取扫描结果:使用WiFiManager类的getScanResults()方法获取扫描到的WiFi网络列表。 ``` List<ScanResult> scanResults = wifiManager.getScanResults(); ``` 5. 连接WiFi:使用WiFiManager类的addNetwork()方法添加WiFi网络,并使用enableNetwork()方法连接指定的网络。 ``` WifiConfiguration wifiConfiguration = new WifiConfiguration(); wifiConfiguration.SSID = "\"" + ssid + "\""; wifiConfiguration.preSharedKey = "\"" + password + "\""; int networkId = wifiManager.addNetwork(wifiConfiguration); wifiManager.enableNetwork(networkId, true); ``` 需要注意的是,Android 6.0及以上版本需要动态获取定位权限才能扫描WiFi网络。动态获取权限的方法可以参考Android官方文档。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值