Android中wifi讲解 显示wifi列表

原创 2016年08月31日 16:13:45

WiFi列表显示

相关API

1、获取wifi对象并进行操作
要操作WIFI设备,需要先获取Context.getSystemService(Context.WIFI_SERVICE)来获取WifiManager对象,并通过这个对象来管理WIFI设备。

相关方法如下:
addNetwork(WifiConfiguration config) 添加一个config描述的WIFI网络,默认情况下,这个WIFI网络是DISABLE状态的。
calculateSignalLevel(int rssi , int numLevels) 计算信号的等级
compareSignalLevel(int rssiA, int rssiB) 对比网络A和网络B的信号强度
createWifiLock(int lockType, String tag) 创建一个WIFI 锁,锁定当前的WIFI连接
disableNetwork(int netId) 让一个网络连接失效
disconnect() 断开当前的WIFI连接
enableNetwork(int netId, Boolean disableOthers) 连接netId所指的WIFI网络,并是其他的网络都被禁用
getConfiguredNetworks() 获取网络连接的状态
getConnectionInfo() 获取当前连接的信息
getDhcpInfo() 获取DHCP 的信息
getScanResulats() 获取扫描测试的结果
getWifiState() 获取当前WIFI设备的状态
isWifiEnabled() 判断WIFI设备是否打开
pingSupplicant() ping操作,和PC的ping操作相同作用
ressociate() 重新连接WIFI网络,即使该网络是已经被连接上的
reconnect() 重新连接一个未连接上的WIFI网络
removeNetwork() 移除某一个网络
saveConfiguration() 保留一个配置信息
setWifiEnabled() 让一个连接有效
startScan() 开始扫描
updateNetwork(WifiConfiguration config) 更新一个网络连接
2、常用的wifi状态
WIFI_STATE_DISABLED WIFI网卡不可用
WIFI_STATE_DISABLING WIFI网卡正在关闭
WIFI_STATE_ENABLED WIFI网卡可用
WIFI_STATE_ENABLING WIFI网卡正在打开
WIFI_STATE_UNKNOWN WIFI网卡状态不可知
3、列表查看有连接信号的wifi热点
ScanResult对象就是用来表示附近wifi热点的属性的,可以通过WifiManager.getScanResults()返回一个ScanResult列表,后面我附上查看附近wifi热点的demo,ScanResult的重要属性有一下几个:
BSSID 接入点的地址
SSID 网络的名字,唯一区别WIFI网络的名字
Capabilities 网络接入的性能
Frequency 当前WIFI设备附近热点的频率(MHz)
Level 所发现的WIFI网络信号强度
4、连接wifi热点
通过WifiManager.getConfiguredNetworks()方法会返回WifiConfiguration对象的列表,然后再调用WifiManager.enableNetwork();方法就可以连接上指定的热点。
5、查看已经连接上的wifi信息
WifiInfo是专门用来表示连接的对象,这个对象可以通过WifiManager.getConnectionInfo()来获取。WifiInfo中包含了当前连接中的相关信息。

getBSSID() 获取BSSID属性
getDetailedStateOf() 获取客户端的连通性
getHiddenSSID() 获取SSID 是否被隐藏
getIpAddress() 获取IP 地址
getLinkSpeed() 获取连接的速度
getMacAddress() 获取Mac 地址
getRssi() 获取802.11n 网络的信号
getSSID() 获取SSID
getSupplicanState() 获取具体客户端状态的信息
在wifi操作中常用的类和方法就这些,下面给出一个列表显示wifi热点的demo。

代码如下:

布局文件如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.wifitest.MainActivity" >

    <ListView 
        android:id="@+id/listview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

    </ListView>

</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <ImageView 
        android:id="@+id/imageview"
        android:layout_width="40dp"
        android:layout_height="40dp"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:src="@drawable/ic_launcher"/>
    <TextView 
        android:id="@+id/textview_wifiname"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/imageview"
        android:layout_marginBottom="14dp"
        android:layout_toRightOf="@+id/imageview"
        android:text="TextView"/>
    <TextView 
        android:id="@+id/signal_strenth"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/textview_wifiname"
        android:layout_alignBottom="@+id/textview_wifiname"
        android:layout_alignParentRight="true"
        android:text="TextView2"/>

</RelativeLayout>

java文件如下:

package com.example.wifitest;

import java.util.List;

import android.support.v7.app.ActionBarActivity;
import android.app.Activity;
import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;


public class MainActivity extends Activity {
    private WifiManager mWifiManager;
    List<ScanResult> list;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }
    private void init(){
        mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        openWifi();
        list = mWifiManager.getScanResults();
        ListView listview = (ListView) findViewById(R.id.listview);
        if (!mWifiManager.isWifiEnabled()) {   //判断wifi是否打开
            Toast.makeText(this, "WiFi未打开", Toast.LENGTH_LONG).show();
        }else{
            listview.setAdapter(new MyAdapter(this,list));
        }
    }
    /**
     * 打开WiFi的方法
     */
    private void openWifi(){
        if (!mWifiManager.isWifiEnabled()) {
            mWifiManager.setWifiEnabled(true);
        }
    }

    /**
     * 设置适配器
     * @author Administrator
     */
    public class MyAdapter extends BaseAdapter{
        private LayoutInflater inflater;
        private List<ScanResult> list;

        public MyAdapter(Context context, List<ScanResult> list) {
            this.inflater = LayoutInflater.from(context);
            this.list = list;
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return list.size();
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            View view = null;
            view = inflater.inflate(R.layout.item_wifi_list, null);
            ScanResult scanResult = list.get(position);
            TextView wifiname = (TextView) view.findViewById(R.id.textview_wifiname);
            wifiname.setText(scanResult.SSID);
            TextView signalStrenth = (TextView) view.findViewById(R.id.signal_strenth);
            signalStrenth.setText(String.valueOf(Math.abs(scanResult.level)));
            ImageView imageview = (ImageView) view.findViewById(R.id.imageview);
            //判断信号强度,显示相应图标
            if (Math.abs(scanResult.level) > 100) {
                imageview.setImageDrawable(getResources().getDrawable(R.drawable.wifi2));
            }else if(Math.abs(scanResult.level) > 80){
                imageview.setImageDrawable(getResources().getDrawable(R.drawable.wifi2));
            }else if(Math.abs(scanResult.level) > 60){
                imageview.setImageDrawable(getResources().getDrawable(R.drawable.wifi2));
            }else if(Math.abs(scanResult.level) > 50){
                imageview.setImageDrawable(getResources().getDrawable(R.drawable.wifi2));
            }else{
                imageview.setImageDrawable(getResources().getDrawable(R.drawable.wifi2));
            }
            return view;
        }
    }
}

android开发-获取wifi列表

最近博主在学frangment框架,因此想着想着就想通过listfragment完成对wifi列表的获取。 好!现在就不说废话了。 一.wifi的基础知识 在Android的官方文档中定义了如下五...
  • smilecjw
  • smilecjw
  • 2016年04月13日 17:42
  • 10479

Android 实现WiFi列表显示与连接

项目需要定制一下Android 4.4的设置界面,今天看一下WiFi部分的实现,首先是效果图: 代码比较简单,主要的功能在WiFiAdmin帮助类中,先看一下WiFiListActivity,代码中...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Android wifi属性简介 及 wifi信息获取(wifi列表、配置信息、热点信息),androidwifi

Android wifi属性简介 及 wifi信息获取(wifi列表、配置信息、热点信息),androidwifi Android wifi对象属性及简易Demo  本章介绍Android开发...

【Android】获取WIFI列表简单小例子

WIFIActivity代码: /** * Created by mzia on 2015/12/11. * 信号强度是负数 wifiinfo.getRssi()这个方法决定的 * 得到的值是一...
  • lingwu7
  • lingwu7
  • 2014年04月17日 14:22
  • 1462

Android6.0 扫描WiFi列表的问题

Android 6.0发布近一年之后,我们遇到了第一个Android 6.0的兼容性问题,getScanResults在Android6.0上返回了一个空列表,纳尼,你是在逗我么?去看了下Androi...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

Android命令行获取WiFi列表以及参数

Android如何通过命令行获取WiFi列表以及参数: 一个工具加一个参数: wpa_cli => The command line interface of wpa_supplicant wifi...

Android开发周围wifi热点和属性的获取

Android开发中WiFi热点和WiFi属性的获取会经常被用到,下面就来记录下WiFi的名称、状态等属性以及获取周围WiFi热点的方法。 一、获取wifi属性 要获得Android系统相...

Java编写一个死锁的程序

死锁是在多线程编程中常常遇到的问题,现在用java编写一个简单的死锁程序。 程序在main()方法中启动2个线程,“线程-A”和“线程-B”。 线程-A 先拿到 lockA,再寻求拿到 lockB;线...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中wifi讲解 显示wifi列表
举报原因:
原因补充:

(最多只允许输入30个字)