天天看點

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

繼續閱讀