老盐 發表於 2019-5-8 20:13:00

android 基于wifi模块通信开发

<p>这篇文章主要是我写完手机与wifi模块通信后所用来总结编写过程的文章,下面,我分几点来说一下编写的大概流程。</p>
<p>一、拉出按钮控件并设置它的点击事件</p>
<p>二、设置wifi权限</p>
<p>三、打开和关闭wifi</p>
<p>四、扫描wifi到列表中</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; (1)拉出ListView控件,并设置它的适配器和点击事件</p>
<p>&nbsp;&nbsp;&nbsp;&nbsp; (2)注册广播</p>
<p> &nbsp; (3)动态申请位置权限</p>
<p> &nbsp; (4)添加并显示到列表控件</p>
<p> &nbsp; (5)注销广播</p>
<p>五、连接wifi设备</p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>一、拉出按钮控件并设置它的点击事件</p>
<p>首先,我们在新建的项目中的布局文件,即activity_main.xml文件中,添加按钮控件的声明。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> &lt;<span style="color: rgba(0, 0, 0, 1)">Button
</span><span style="color: rgba(0, 128, 128, 1)">2</span>             android:id="@+id/OPEN"
<span style="color: rgba(0, 128, 128, 1)">3</span>             android:layout_width="wrap_content"
<span style="color: rgba(0, 128, 128, 1)">4</span>             android:layout_height="wrap_content"
<span style="color: rgba(0, 128, 128, 1)">5</span>             android:text="打开WiFi" /&gt;</pre>
</div>
<p>然后,我们到MainActivity.java文件中,定义Button对象。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 128, 128, 1)">1</span> <span style="color: rgba(0, 0, 255, 1)">public</span> Button openWifi;</pre>
</div>
<p>然后,我们在MainActivity.java文件中的onCreate()方法中给Button的对象赋值,其中,fingViewById()的参数为我们在xml文件中定义的按钮的id名。</p>
<div class="cnblogs_code">
<pre> openWifi = (Button) findViewById(R.id.OPEN);</pre>
</div>
<p>接下来,我们就可以开始设置点击事件了。我们在onCreate()中,调用setOnClickListener()方法。</p>
<div class="cnblogs_code">
<pre>openWifi.setOnClickListener(<span style="color: rgba(0, 0, 255, 1)">this</span>);</pre>
</div>
<p>最后,我们在MainActivity.java中重写onClick()方法即可。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">@Override
</span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> OnClick(View v)
{
      </span><span style="color: rgba(0, 0, 255, 1)">switch</span><span style="color: rgba(0, 0, 0, 1)">(v.getId())
      {
         </span><span style="color: rgba(0, 0, 255, 1)">case</span> R.id.OPEN:   <span style="color: rgba(0, 0, 255, 1)">break</span><span style="color: rgba(0, 0, 0, 1)">;
       }         

}</span></pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>二、设置wifi权限</p>
<p>我们可以在AndroidManifest.xml中添加权限。</p>
<div class="cnblogs_code">
<pre>    &lt;uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /&gt; &lt;!-- 允许改变wifi连接状态 --&gt;
    &lt;uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /&gt; &lt;!-- 允许应用获取网络状态信息 --&gt;
    &lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /&gt; &lt;!-- 允许应用获得WiFi信息 --&gt;
    &lt;uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /&gt; &lt;!-- 获取位置信息 --&gt;
    &lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /&gt;
    &lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /&gt; &lt;!-- 获取手机状态 --&gt;
    &lt;uses-permission android:name="android.permission.READ_PHONE_STATE" /&gt; &lt;!-- 读写SD卡 --&gt;
    &lt;uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /&gt;
    &lt;uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /&gt;
    &lt;uses-permission android:name="android.permission.INTERNET" /&gt;</pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>三、打开和关闭wifi</p>
<p>首先,我们要先定义一个WifiManager类的对象。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">final</span> WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);</pre>
</div>
<p>然后我们只要在按钮的点击事件中添加以下代码即可。</p>
<div class="cnblogs_code">
<pre>wifiManager.setWifiEnabled(<span style="color: rgba(0, 0, 255, 1)">true</span>);   //开启wifi</pre>
</div>
<div class="cnblogs_code">
<pre>wifiManager.setWifiEnabled(<span style="color: rgba(0, 0, 255, 1)">false</span>);//关闭wifi</pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>四、扫描wifi到列表中</p>
<p>(1)、拉出ListView控件,并设置它的适配器和点击事件</p>
<p>首先,我们要在activity_main.xml文件中,添加列表控件的声明。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">&lt;</span><span style="color: rgba(128, 0, 0, 1)">ListView
      </span><span style="color: rgba(255, 0, 0, 1)">android:id</span><span style="color: rgba(0, 0, 255, 1)">="@+id/LIST"</span><span style="color: rgba(255, 0, 0, 1)">
      android:layout_width</span><span style="color: rgba(0, 0, 255, 1)">="match_parent"</span><span style="color: rgba(255, 0, 0, 1)">
      android:layout_height</span><span style="color: rgba(0, 0, 255, 1)">="wrap_content"</span><span style="color: rgba(0, 0, 255, 1)">&gt;&lt;/</span><span style="color: rgba(128, 0, 0, 1)">ListView</span><span style="color: rgba(0, 0, 255, 1)">&gt;</span></pre>
</div>
<p>然后,我们要在MainActivity.java文件中,定义ListView对象。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">public</span> ListView listView;</pre>
</div>
<p>同理,我们要在onCreate()方法中设置列表的点击事件。</p>
<div class="cnblogs_code">
<pre>listView.setOnItemClickListener(<span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> AdapterView.OnItemClickListener() {
            @Override
            </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> onItemClick(AdapterView&lt;?&gt; adapterView, View view, <span style="color: rgba(0, 0, 255, 1)">int</span> i, <span style="color: rgba(0, 0, 255, 1)">long</span><span style="color: rgba(0, 0, 0, 1)"> l) {

            }
});</span></pre>
</div>
<p>添加完后,我们就可以触发列表的点击事件了。但是,这样还是看不见列表里的变化的,因为我们还没有为列表添加适配器。我们可以先了解一下适配器是什么。适配器是一个连接数据和AdapterView(ListView就是一个典型的AdapterView)的桥梁,通过它能有效地实现数据与AdapterView的分离设置,使AdapterView与数据的绑定更加简便,修改更加方便。</p>
<p>接下来,我们就开始定义适配器和有个集合类对象。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">public</span> ArrayAdapter adapter;</pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">public</span> ArrayList&lt;String&gt; arrayList = <span style="color: rgba(0, 0, 255, 1)">new</span> ArrayList();   //用于存放字符串</pre>
<pre><span style="color: rgba(204, 120, 50, 1)">public ArrayList&lt;ScanResult&gt; <span style="color: rgba(152, 118, 170, 1)">scanList = <span style="color: rgba(204, 120, 50, 1)">new ArrayList()<span style="color: rgba(204, 120, 50, 1)">;   //用于存放扫描到的设备的信息</span></span></span></span></pre>
</div>
<p>然后,我们在onCreate()方法中给适配器赋值。</p>
<div class="cnblogs_code">
<pre>      adapter = <span style="color: rgba(0, 0, 255, 1)">new</span> ArrayAdapter(<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">, android.R.layout.simple_expandable_list_item_1, arrayList);
      listView.setAdapter(adapter);</span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">设置列表显示</span></pre>
</div>
<p>(2)注册广播</p>
<p>首先,我们要在onCreate()中定义IntentFilter的对象。</p>
<div class="cnblogs_code">
<pre> IntentFilter filter = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> IntentFilter();
      filter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
      filter.addAction(WifiManager.WIFI_STATE_CHANGED_ACTION);
      filter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
      filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);</span></pre>
</div>
<p>接下来我们要重写<span style="color: rgba(0, 0, 0, 1)">BroadcastReceiver类来定义广播。</span></p>
<div class="cnblogs_code">
<pre> <span style="color: rgba(0, 0, 255, 1)">private</span> BroadcastReceiver receiver = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> BroadcastReceiver() {
      @Override
      </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> onReceive(<span style="color: rgba(0, 0, 255, 1)">final</span><span style="color: rgba(0, 0, 0, 1)"> Context context, Intent intent) {
            </span><span style="color: rgba(0, 0, 255, 1)">final</span> WifiManager wifiManager =<span style="color: rgba(0, 0, 0, 1)"> (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
            String action </span>=<span style="color: rgba(0, 0, 0, 1)"> intent.getAction();
            </span><span style="color: rgba(0, 0, 255, 1)">if</span> (action.equals(wifiManager.SCAN_RESULTS_AVAILABLE_ACTION))<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">搜索到可用的wifi</span>
<span style="color: rgba(0, 0, 0, 1)">            {
                scanResults </span>= wifiManager.getScanResults();<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">获取wifi的扫描结果</span>
                scanResults =<span style="color: rgba(0, 0, 0, 1)"> getNewList(scanResults);
                </span><span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> (ScanResult scanResult : scanResults) {
                  arrayList.add(scanResult.SSID);
                  scanList.add(scanResult);
                  adapter.notifyDataSetChanged();
                }
            }

            </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
                NetworkInfo info </span>=<span style="color: rgba(0, 0, 0, 1)"> intent.getParcelableExtra(WifiManager.EXTRA_NETWORK_INFO);
                </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (info.getState().equals(NetworkInfo.State.CONNECTED)) {
                  </span><span style="color: rgba(0, 0, 255, 1)">final</span> WifiInfo wifiInfo =<span style="color: rgba(0, 0, 0, 1)"> wifiManager.getConnectionInfo();
                  Toast.makeText(context, </span>"已成功连接" +<span style="color: rgba(0, 0, 0, 1)"> wifiInfo.getSSID(), Toast.LENGTH_SHORT).show();
                } </span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> (info.getState().equals(NetworkInfo.State.DISCONNECTED)) {
                  Toast.makeText(context, </span>"已断开连接"<span style="color: rgba(0, 0, 0, 1)">, Toast.LENGTH_SHORT).show();
                }
            }
      }
    };</span></pre>
</div>
<p>最后,在onCreate()中注册广播。</p>
<div class="cnblogs_code">
<pre>registerReceiver(receiver, filter);</pre>
</div>
<p>&nbsp;(3)申请动态的位置权限</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> applypermission() {
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> (Build.VERSION.SDK_INT &gt;= 23<span style="color: rgba(0, 0, 0, 1)">) {
            </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">检查是否已经给了权限</span>
            <span style="color: rgba(0, 0, 255, 1)">int</span> checkpermission =<span style="color: rgba(0, 0, 0, 1)"> ContextCompat.checkSelfPermission(getApplicationContext(),
                  Manifest.permission.ACCESS_FINE_LOCATION);
            </span><span style="color: rgba(0, 0, 255, 1)">if</span> (checkpermission != PackageManager.PERMISSION_GRANTED) {<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">没有给权限</span>
                Log.e("permission", "动态申请"<span style="color: rgba(0, 0, 0, 1)">);
                </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">参数分别是当前活动,权限字符串数组,requestcode</span>
                ActivityCompat.requestPermissions(WiFiMainActivity.<span style="color: rgba(0, 0, 255, 1)">this</span>, <span style="color: rgba(0, 0, 255, 1)">new</span> String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1<span style="color: rgba(0, 0, 0, 1)">);
            }
      }
    }

    @Override
    </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> onRequestPermissionsResult(<span style="color: rgba(0, 0, 255, 1)">int</span> requestCode, @NonNull String[] permissions, @NonNull <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)">[] grantResults) {
      </span><span style="color: rgba(0, 0, 255, 1)">super</span><span style="color: rgba(0, 0, 0, 1)">.onRequestPermissionsResult(requestCode, permissions, grantResults);
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> (grantResults ==<span style="color: rgba(0, 0, 0, 1)"> PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(WiFiMainActivity.</span><span style="color: rgba(0, 0, 255, 1)">this</span>, "已授权"<span style="color: rgba(0, 0, 0, 1)">, Toast.LENGTH_SHORT).show();
      } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
            Toast.makeText(WiFiMainActivity.</span><span style="color: rgba(0, 0, 255, 1)">this</span>, "拒绝授权"<span style="color: rgba(0, 0, 0, 1)">, Toast.LENGTH_SHORT).show();
      }

    }</span></pre>
</div>
<p>(4)添加并显示到列表控件</p>
<p>添加有个按钮控件,然后在调用startScan()方法就可以开始扫描了。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> scanWiFi() {
      adapter.clear();    //清空列表里的数据
      adapter.notifyDataSetChanged();       //刷新
      WifiManager wifiManager </span>=<span style="color: rgba(0, 0, 0, 1)"> (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
      </span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">wifiManager.isWifiEnabled()) {      //判断wifi是否打开
            wifiManager.setWifiEnabled(</span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);    //如果没有打开就打开wifi
      }
      </span><span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">开始扫描wifi设备</span>
<span style="color: rgba(0, 0, 0, 1)">      wifiManager.startScan();
    }</span></pre>
</div>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">public</span> List&lt;ScanResult&gt; getNewList(List&lt;ScanResult&gt;<span style="color: rgba(0, 0, 0, 1)"> list) {
      List</span>&lt;ScanResult&gt; lists = <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> ArrayList();
      </span><span style="color: rgba(0, 0, 255, 1)">for</span> (<span style="color: rgba(0, 0, 255, 1)">int</span> i = 0; i &lt; list.size(); i++<span style="color: rgba(0, 0, 0, 1)">) {
            </span><span style="color: rgba(0, 0, 255, 1)">if</span> (!<span style="color: rgba(0, 0, 0, 1)">lists.contains(list.get(i))) {
                lists.add(list.get(i));
            }
      }
      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> lists;
    }</span></pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>(5)注销广播</p>
<p>&nbsp;在onCreate()中使用unregisterReceiver()方法注销广播。</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">protected</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> onDestroy() {
      </span><span style="color: rgba(0, 0, 255, 1)">super</span>.onDestroy();<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">解除注册</span>
<span style="color: rgba(0, 0, 0, 1)">      unregisterReceiver(receiver);
    }</span></pre>
</div>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>五、连接wifi设备</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 0, 1)">wifiManager.disconnect();
                </span><span style="color: rgba(0, 0, 255, 1)">final</span> ScanResult result =<span style="color: rgba(0, 0, 0, 1)"> scanList.get(i);
                String capabilities </span>=<span style="color: rgba(0, 0, 0, 1)"> result.capabilities;
                </span><span style="color: rgba(0, 0, 255, 1)">int</span> type =<span style="color: rgba(0, 0, 0, 1)"> WIFICIPHER_WPA;
                </span><span style="color: rgba(0, 0, 255, 1)">if</span> (!TextUtils.isEmpty(capabilities))<span style="color: rgba(0, 128, 0, 1)">//</span><span style="color: rgba(0, 128, 0, 1)">判断字符串是否为null</span>
<span style="color: rgba(0, 0, 0, 1)">                {
                  </span><span style="color: rgba(0, 0, 255, 1)">if</span> (capabilities.contains("WPA") || capabilities.contains("wpa"<span style="color: rgba(0, 0, 0, 1)">)) {
                        type </span>=<span style="color: rgba(0, 0, 0, 1)"> WIFICIPHER_WPA;
                  } </span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (capabilities.contains("WEP") || capabilities.contains("wep"<span style="color: rgba(0, 0, 0, 1)">)) {
                        type </span>=<span style="color: rgba(0, 0, 0, 1)"> WIFICIPHER_WEP;
                  } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
                        type </span>=<span style="color: rgba(0, 0, 0, 1)"> WIFICIPHER_NOPASS;
                  }
                  config </span>=<span style="color: rgba(0, 0, 0, 1)"> isExsits(result.SSID);
                  </span><span style="color: rgba(0, 0, 255, 1)">if</span> (config == <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">) {
                        </span><span style="color: rgba(0, 0, 255, 1)">if</span> (type !=<span style="color: rgba(0, 0, 0, 1)"> WIFICIPHER_NOPASS) {
                            </span><span style="color: rgba(0, 0, 255, 1)">final</span> EditText editText = <span style="color: rgba(0, 0, 255, 1)">new</span> EditText(WiFiMainActivity.<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">);
                            </span><span style="color: rgba(0, 0, 255, 1)">final</span> <span style="color: rgba(0, 0, 255, 1)">int</span> fianalType =<span style="color: rgba(0, 0, 0, 1)"> type;
                            alertDialog </span>= <span style="color: rgba(0, 0, 255, 1)">new</span> AlertDialog.Builder(WiFiMainActivity.<span style="color: rgba(0, 0, 255, 1)">this</span><span style="color: rgba(0, 0, 0, 1)">);
                            alertDialog.setTitle(</span>"请输入WiFi密码:"<span style="color: rgba(0, 0, 0, 1)">);
                            alertDialog.setView(editText);
                            alertDialog.setPositiveButton(</span>"OK", <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> DialogInterface.OnClickListener() {
                              @Override
                              </span><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span> onClick(DialogInterface dialog, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> which) {
                                    config </span>=<span style="color: rgba(0, 0, 0, 1)"> createWifiInfo(result.SSID, editText.getText().toString(), fianalType);
                                    connectWifi(config);
                              }
                            });

                            alertDialog.setNegativeButton(</span>"CANCEL", <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">).show();
                        } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
                            config </span>= createWifiInfo(result.SSID, ""<span style="color: rgba(0, 0, 0, 1)">, type);
                            connectWifi(config);
                        }
                  } </span><span style="color: rgba(0, 0, 255, 1)">else</span><span style="color: rgba(0, 0, 0, 1)"> {
                        connectWifi(config);
                  }
                }</span></pre>
</div>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">public</span> <span style="color: rgba(0, 0, 255, 1)">void</span><span style="color: rgba(0, 0, 0, 1)"> connectWifi(WifiConfiguration config) {
      </span><span style="color: rgba(0, 0, 255, 1)">final</span> WifiManager wifiManager =<span style="color: rgba(0, 0, 0, 1)"> (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
      </span><span style="color: rgba(0, 0, 255, 1)">int</span> wcgID =<span style="color: rgba(0, 0, 0, 1)"> wifiManager.addNetwork(config);
      wifiManager.enableNetwork(wcgID, </span><span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">);
    }</span></pre>
</div>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">public</span> WifiConfiguration createWifiInfo(String SSID, String password, <span style="color: rgba(0, 0, 255, 1)">int</span><span style="color: rgba(0, 0, 0, 1)"> type) {
      WifiConfiguration config </span>= <span style="color: rgba(0, 0, 255, 1)">new</span><span style="color: rgba(0, 0, 0, 1)"> WifiConfiguration();
      config.allowedAuthAlgorithms.clear();
      config.allowedGroupCiphers.clear();
      config.allowedKeyManagement.clear();
      config.allowedPairwiseCiphers.clear();
      config.allowedProtocols.clear();
      config.SSID </span>= "\"" + SSID + "\""<span style="color: rgba(0, 0, 0, 1)">;

      </span><span style="color: rgba(0, 0, 255, 1)">if</span> (type ==<span style="color: rgba(0, 0, 0, 1)"> WIFICIPHER_WEP) {
            config.preSharedKey </span>= "\"" + password + "\""<span style="color: rgba(0, 0, 0, 1)">;
            config.hiddenSSID </span>= <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
            config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
            config.wepTxKeyIndex </span>= 0<span style="color: rgba(0, 0, 0, 1)">;
      } </span><span style="color: rgba(0, 0, 255, 1)">else</span> <span style="color: rgba(0, 0, 255, 1)">if</span> (type ==<span style="color: rgba(0, 0, 0, 1)"> WIFICIPHER_WPA) {
            config.preSharedKey </span>= "\"" + password + "\""<span style="color: rgba(0, 0, 0, 1)">;
            config.hiddenSSID </span>= <span style="color: rgba(0, 0, 255, 1)">true</span><span style="color: rgba(0, 0, 0, 1)">;
            config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
            config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
            config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
            config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
            config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
            config.status </span>=<span style="color: rgba(0, 0, 0, 1)"> WifiConfiguration.Status.ENABLED;
      }
      </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> config;
    }</span></pre>
</div>
<p>&nbsp;</p>
<div class="cnblogs_code">
<pre><span style="color: rgba(0, 0, 255, 1)">private</span><span style="color: rgba(0, 0, 0, 1)"> WifiConfiguration isExsits(String ssid) {
      </span><span style="color: rgba(0, 0, 255, 1)">final</span> WifiManager wifiManager =<span style="color: rgba(0, 0, 0, 1)"> (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE);
      List</span>&lt;WifiConfiguration&gt; existingConfigs =<span style="color: rgba(0, 0, 0, 1)"> wifiManager.getConfiguredNetworks();
      </span><span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> (WifiConfiguration existingConfig : existingConfigs) {
            </span><span style="color: rgba(0, 0, 255, 1)">if</span> (existingConfig.SSID.equals("\"" + ssid + "\""<span style="color: rgba(0, 0, 0, 1)">))
                </span><span style="color: rgba(0, 0, 255, 1)">return</span><span style="color: rgba(0, 0, 0, 1)"> existingConfig;
      }
      </span><span style="color: rgba(0, 0, 255, 1)">return</span> <span style="color: rgba(0, 0, 255, 1)">null</span><span style="color: rgba(0, 0, 0, 1)">;
    }</span></pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/lwkdbk/p/10760321.html
頁: [1]
查看完整版本: android 基于wifi模块通信开发