天天看点

【Android】Android之WiFi开发应用示例

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  : 未知网卡状态
【Android】Android之WiFi开发应用示例
【Android】Android之WiFi开发应用示例
【Android】Android之WiFi开发应用示例

点击打开wifi:                                        状态为3-wifi网卡可用                         扫描到网络

首先看以下main.xml:

<code>1</code>

<code>&lt;div&gt;&lt;?xml version=</code><code>"1.0"</code> <code>encoding=</code><code>"utf-8"</code><code>?&gt;</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>&gt;</code>

<code>6</code>

<code>7</code>

<code>&lt;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>&lt;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>/&gt;</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>&lt;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>&lt;/linearlayout&gt;</code>

<code>43</code>

<code>&lt;/scrollview&gt;&lt;/div&gt;</code>

<code>44</code>

<code>&lt;div&gt;</code>

接下来我们吧wifi的相关操作都封装在了一个wifiadmin类中,以后开启或关闭等相关操作可以直接调用这个类的相关方法:

<code>&lt;/div&gt;</code>

<code>&lt;div&gt;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&lt;scanresult&gt; mwifilist;</code>

<code>//网络连接列表</code>

<code>private</code> <code>list&lt;wificonfiguration&gt; 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&lt;wificonfiguration&gt; 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&gt;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&lt;scanresult&gt; 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&lt;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>}&lt;/div&gt;</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&lt;scanresult&gt; 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&lt;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>&lt;!-- 以下是使用wifi访问网络所需的权限 --&gt;</code>

<code>&lt;uses-permission android:name=</code><code>"android.permission.change_network_state"</code><code>&gt;&lt;/uses-permission&gt;</code>

<code>&lt;uses-permission android:name=</code><code>"android.permission.change_wifi_state"</code><code>&gt;&lt;/uses-permission&gt;</code>

<code>&lt;uses-permission android:name=</code><code>"android.permission.access_network_state"</code><code>&gt;&lt;/uses-permission&gt;</code>

<code>&lt;uses-permission android:name=</code><code>"android.permission.access_wifi_state"</code><code>&gt;&lt;/uses-permission&gt;&lt;/div&gt;</code>

最后看以下演示效果:

这些就是扫描到的wifi,具体参数参见上面介绍。

继续阅读