1.scanresult
主要用来描述已经检测出的接入点,包括接入点的地址,接入点的名称,身份认证,频率,信号强度等信息。
wifi网络的配置,包括安全设置等。
3.wifiinfo
wifi无线连接的描述,包括接入点,网络连接状态,隐藏的接入点,ip地址,连接速度,mac地址,网络id,信号强度等信息。这里简单介绍一下这里的方法:
getbssid() 获取bssid getdetailedstateof() 获取客户端的连通性 gethiddenssid() 获得ssid 是否被隐藏 getipaddress() 获取ip 地址 getlinkspeed() 获得连接的速度 getmacaddress() 获得mac 地址 getrssi() 获得802.11n 网络的信号 getssid() 获得ssid getsupplicanstate() 返回具体客户端状态的信息
4.wifimanager
这个不用说,就是用来管理我们的wifi 连接,这里已经定义好了一些类,可以供我们使用。
获取wifi网卡的状态
wifi网卡的状态是由一系列的整形常量来表示的。
1.wifi_state_disabled : wifi网卡不可用(1) 2.wifi_state_disabling : wifi网卡正在关闭(0) 3.wifi_state_enabled : wifi网卡可用(3) 4.wifi_state_enabling : wifi网正在打开(2) (wifi启动需要一段时间) 5.wifi_state_unknown : 未知网卡状态
点击打开wifi: 状态为3-wifi网卡可用 扫描到网络
首先看以下main.xml:
<code>1</code>
<code><div><?xml version=</code><code>"1.0"</code> <code>encoding=</code><code>"utf-8"</code><code>?></code>
<code>2</code>
<code>3</code>
<code>android:layout_width=</code><code>"fill_parent"</code>
<code>4</code>
<code>android:layout_height=</code><code>"fill_parent"</code>
<code>5</code>
<code>></code>
<code>6</code>
<code>7</code>
<code><linearlayout</code>
<code>8</code>
<code>android:orientation=</code><code>"vertical"</code>
<code>9</code>
<code>10</code>
<code>11</code>
<code>12</code>
<code><button</code>
<code>13</code>
<code>android:id=</code><code>"@+id/scan"</code>
<code>14</code>
<code>android:layout_width=</code><code>"wrap_content"</code>
<code>15</code>
<code>android:layout_height=</code><code>"wrap_content"</code>
<code>16</code>
<code>android:text=</code><code>"扫描网络"</code>
<code>17</code>
<code>/></code>
<code>18</code>
<code>19</code>
<code>android:id=</code><code>"@+id/start"</code>
<code>20</code>
<code>21</code>
<code>22</code>
<code>android:text=</code><code>"打开wifi"</code>
<code>23</code>
<code>24</code>
<code>25</code>
<code>android:id=</code><code>"@+id/stop"</code>
<code>26</code>
<code>27</code>
<code>28</code>
<code>android:text=</code><code>"关闭wifi"</code>
<code>29</code>
<code>30</code>
<code>31</code>
<code>android:id=</code><code>"@+id/check"</code>
<code>32</code>
<code>33</code>
<code>34</code>
<code>android:text=</code><code>"wifi状态"</code>
<code>35</code>
<code>36</code>
<code><textview</code>
<code>37</code>
<code>android:id=</code><code>"@+id/allnetwork"</code>
<code>38</code>
<code>39</code>
<code>40</code>
<code>android:text=</code><code>"当前没有扫描到wifi网络"</code>
<code>41</code>
<code>42</code>
<code></linearlayout></code>
<code>43</code>
<code></scrollview></div></code>
<code>44</code>
<code><div></code>
接下来我们吧wifi的相关操作都封装在了一个wifiadmin类中,以后开启或关闭等相关操作可以直接调用这个类的相关方法:
<code></div></code>
<code><div>import java.util.list;</code>
<code>import android.content.context;</code>
<code>import android.net.wifi.scanresult;</code>
<code>import android.net.wifi.wificonfiguration;</code>
<code>import android.net.wifi.wifiinfo;</code>
<code>import android.net.wifi.wifimanager;</code>
<code>import android.net.wifi.wifimanager.wifilock;</code>
<code>public</code> <code>class</code> <code>wifiadmin {</code>
<code>//定义一个wifimanager对象</code>
<code>private</code> <code>wifimanager mwifimanager;</code>
<code>//定义一个wifiinfo对象</code>
<code>private</code> <code>wifiinfo mwifiinfo;</code>
<code>//扫描出的网络连接列表</code>
<code>private</code> <code>list<scanresult> mwifilist;</code>
<code>//网络连接列表</code>
<code>private</code> <code>list<wificonfiguration> mwificonfigurations;</code>
<code>wifilock mwifilock;</code>
<code>public</code> <code>wifiadmin(context context){</code>
<code>//取得wifimanager对象</code>
<code>mwifimanager=(wifimanager) context.getsystemservice(context.wifi_service);</code>
<code>//取得wifiinfo对象</code>
<code>mwifiinfo=mwifimanager.getconnectioninfo();</code>
<code>}</code>
<code>//打开wifi</code>
<code>public</code> <code>void openwifi(){</code>
<code>if</code><code>(!mwifimanager.iswifienabled()){</code>
<code>mwifimanager.setwifienabled(true);</code>
<code>//关闭wifi</code>
<code>public</code> <code>void closewifi(){</code>
<code>if</code><code>(mwifimanager.iswifienabled()){</code>
<code>mwifimanager.setwifienabled(false);</code>
<code>// 检查当前wifi状态</code>
<code>public</code> <code>int checkstate() {</code>
<code>return</code> <code>mwifimanager.getwifistate();</code>
<code>//锁定wifilock</code>
<code>45</code>
<code>public</code> <code>void acquirewifilock(){</code>
<code>46</code>
<code>mwifilock.acquire();</code>
<code>47</code>
<code>48</code>
<code>//解锁wifilock</code>
<code>49</code>
<code>public</code> <code>void releasewifilock(){</code>
<code>50</code>
<code>//判断是否锁定</code>
<code>51</code>
<code>if</code><code>(mwifilock.isheld()){</code>
<code>52</code>
<code>53</code>
<code>54</code>
<code>55</code>
<code>//创建一个wifilock</code>
<code>56</code>
<code>public</code> <code>void createwifilock(){</code>
<code>57</code>
<code>mwifilock=mwifimanager.createwifilock(</code><code>"test"</code><code>);</code>
<code>58</code>
<code>59</code>
<code>//得到配置好的网络</code>
<code>60</code>
<code>public</code> <code>list<wificonfiguration> getconfiguration(){</code>
<code>61</code>
<code>return</code> <code>mwificonfigurations;</code>
<code>62</code>
<code>63</code>
<code>//指定配置好的网络进行连接</code>
<code>64</code>
<code>public</code> <code>void connetionconfiguration(int index){</code>
<code>65</code>
<code>if</code><code>(index>mwificonfigurations.size()){</code>
<code>66</code>
<code>return</code> <code>;</code>
<code>67</code>
<code>68</code>
<code>//连接配置好指定id的网络</code>
<code>69</code>
<code>mwifimanager.enablenetwork(mwificonfigurations.get(index).networkid, true);</code>
<code>70</code>
<code>71</code>
<code>public</code> <code>void startscan(){</code>
<code>72</code>
<code>mwifimanager.startscan();</code>
<code>73</code>
<code>//得到扫描结果</code>
<code>74</code>
<code>mwifilist=mwifimanager.getscanresults();</code>
<code>75</code>
<code>//得到配置好的网络连接</code>
<code>76</code>
<code>mwificonfigurations=mwifimanager.getconfigurednetworks();</code>
<code>77</code>
<code>78</code>
<code>//得到网络列表</code>
<code>79</code>
<code>public</code> <code>list<scanresult> getwifilist(){</code>
<code>80</code>
<code>return</code> <code>mwifilist;</code>
<code>81</code>
<code>82</code>
<code>//查看扫描结果</code>
<code>83</code>
<code>public</code> <code>stringbuffer lookupscan(){</code>
<code>84</code>
<code>stringbuffer sb=</code><code>new</code> <code>stringbuffer();</code>
<code>85</code>
<code>for</code><code>(int i=0;i<mwifilist.size();i++){</code>
<code>86</code>
<code>sb.append(</code><code>"index_"</code> <code>+ </code><code>new</code> <code>integer(i + 1).tostring() + </code><code>":"</code><code>);</code>
<code>87</code>
<code>// 将scanresult信息转换成一个字符串包</code>
<code>88</code>
<code>// 其中把包括:bssid、ssid、capabilities、frequency、level</code>
<code>89</code>
<code>sb.append((mwifilist.get(i)).tostring()).append(</code><code>"\n"</code><code>);</code>
<code>90</code>
<code>91</code>
<code>return</code> <code>sb;</code>
<code>92</code>
<code>93</code>
<code>public</code> <code>string getmacaddress(){</code>
<code>94</code>
<code>return</code> <code>(mwifiinfo==null)?</code><code>"null"</code><code>:mwifiinfo.getmacaddress();</code>
<code>95</code>
<code>96</code>
<code>public</code> <code>string getbssid(){</code>
<code>97</code>
<code>return</code> <code>(mwifiinfo==null)?</code><code>"null"</code><code>:mwifiinfo.getbssid();</code>
<code>98</code>
<code>99</code>
<code>public</code> <code>int getipaddress(){</code>
<code>100</code>
<code>return</code> <code>(mwifiinfo==null)?0:mwifiinfo.getipaddress();</code>
<code>101</code>
<code>102</code>
<code>//得到连接的id</code>
<code>103</code>
<code>public</code> <code>int getnetwordid(){</code>
<code>104</code>
<code>return</code> <code>(mwifiinfo==null)?0:mwifiinfo.getnetworkid();</code>
<code>105</code>
<code>106</code>
<code>//得到wifiinfo的所有信息</code>
<code>107</code>
<code>public</code> <code>string getwifiinfo(){</code>
<code>108</code>
<code>return</code> <code>(mwifiinfo==null)?</code><code>"null"</code><code>:mwifiinfo.tostring();</code>
<code>109</code>
<code>110</code>
<code>//添加一个网络并连接</code>
<code>111</code>
<code>public</code> <code>void addnetwork(wificonfiguration configuration){</code>
<code>112</code>
<code>int wcgid=mwifimanager.addnetwork(configuration);</code>
<code>113</code>
<code>mwifimanager.enablenetwork(wcgid, true);</code>
<code>114</code>
<code>115</code>
<code>//断开指定id的网络</code>
<code>116</code>
<code>public</code> <code>void disconnectionwifi(int netid){</code>
<code>117</code>
<code>mwifimanager.disablenetwork(netid);</code>
<code>118</code>
<code>mwifimanager.disconnect();</code>
<code>119</code>
<code>120</code>
<code>}</div></code>
<code>121</code>
最后看以下wifiactivity类:
<code>import android.app.activity;</code>
<code>import android.os.bundle;</code>
<code>import android.view.view;</code>
<code>import android.view.view.onclicklistener;</code>
<code>import android.widget.button;</code>
<code>import android.widget.textview;</code>
<code>import android.widget.toast;</code>
<code>public</code> <code>class</code> <code>wifiactivity </code><code>extends</code> <code>activity {</code>
<code>/** called when the activity is first created. */</code>
<code>private</code> <code>textview allnetwork;</code>
<code>private</code> <code>button scan;</code>
<code>private</code> <code>button start;</code>
<code>private</code> <code>button stop;</code>
<code>private</code> <code>button check;</code>
<code>private</code> <code>wifiadmin mwifiadmin;</code>
<code>// 扫描结果列表</code>
<code>private</code> <code>list<scanresult> list;</code>
<code>private</code> <code>scanresult mscanresult;</code>
<code>private</code> <code>stringbuffer sb=</code><code>new</code> <code>stringbuffer();</code>
<code>@override</code>
<code>public</code> <code>void oncreate(bundle savedinstancestate) {</code>
<code>super.oncreate(savedinstancestate);</code>
<code>setcontentview(r.layout.main);</code>
<code>mwifiadmin = </code><code>new</code> <code>wifiadmin(wifiactivity.this);</code>
<code>init();</code>
<code>public</code> <code>void init(){</code>
<code>allnetwork = (textview) findviewbyid(r.id.allnetwork);</code>
<code>scan = (button) findviewbyid(r.id.scan);</code>
<code>start = (button) findviewbyid(r.id.start);</code>
<code>stop = (button) findviewbyid(r.id.stop);</code>
<code>check = (button) findviewbyid(r.id.check);</code>
<code>scan.setonclicklistener(</code><code>new</code> <code>mylistener());</code>
<code>start.setonclicklistener(</code><code>new</code> <code>mylistener());</code>
<code>stop.setonclicklistener(</code><code>new</code> <code>mylistener());</code>
<code>check.setonclicklistener(</code><code>new</code> <code>mylistener());</code>
<code>private</code> <code>class</code> <code>mylistener </code><code>implements</code> <code>onclicklistener{</code>
<code>public</code> <code>void onclick(view v) {</code>
<code>// todo auto-generated method stub</code>
<code>switch</code> <code>(v.getid()) {</code>
<code>case</code> <code>r.id.scan:</code><code>//扫描网络</code>
<code>getallnetworklist();</code>
<code>break</code><code>;</code>
<code>case</code> <code>r.id.start:</code><code>//打开wifi</code>
<code>mwifiadmin.openwifi();</code>
<code>toast.maketext(wifiactivity.this, </code><code>"当前wifi状态为:"</code><code>+mwifiadmin.checkstate(), 1).show();</code>
<code>case</code> <code>r.id.stop:</code><code>//关闭wifi</code>
<code>mwifiadmin.closewifi();</code>
<code>case</code> <code>r.id.check:</code><code>//wifi状态</code>
<code>default</code><code>:</code>
<code>public</code> <code>void getallnetworklist(){</code>
<code>// 每次点击扫描之前清空上一次的扫描结果</code>
<code>if</code><code>(sb!=null){</code>
<code>sb=</code><code>new</code> <code>stringbuffer();</code>
<code>//开始扫描网络</code>
<code>mwifiadmin.startscan();</code>
<code>list=mwifiadmin.getwifilist();</code>
<code>if</code><code>(list!=null){</code>
<code>for</code><code>(int i=0;i<list.size();i++){</code>
<code>mscanresult=list.get(i);</code>
<code>sb=sb.append(mscanresult.bssid+</code><code>" "</code><code>).append(mscanresult.ssid+</code><code>" "</code><code>)</code>
<code>.append(mscanresult.capabilities+</code><code>" "</code><code>).append(mscanresult.frequency+</code><code>" "</code><code>)</code>
<code>.append(mscanresult.level+</code><code>"\n\n"</code><code>);</code>
<code>allnetwork.settext(</code><code>"扫描到的wifi网络:\n"</code><code>+sb.tostring());</code>
不要忘了加入权限:
<code><!-- 以下是使用wifi访问网络所需的权限 --></code>
<code><uses-permission android:name=</code><code>"android.permission.change_network_state"</code><code>></uses-permission></code>
<code><uses-permission android:name=</code><code>"android.permission.change_wifi_state"</code><code>></uses-permission></code>
<code><uses-permission android:name=</code><code>"android.permission.access_network_state"</code><code>></uses-permission></code>
<code><uses-permission android:name=</code><code>"android.permission.access_wifi_state"</code><code>></uses-permission></div></code>
最后看以下演示效果:
这些就是扫描到的wifi,具体参数参见上面介绍。