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,具體參數參見上面介紹。