Android 通過代碼設置、打開wifi熱點及熱點連接的實現代碼


下面我們看看創建熱點的代碼實現:

package com.tel.lajoin.wifi.hotspot;
import java.lang.reflect.Method;
import android.app.Activity;
import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class HotspotActivity extends Activity {
  private WifiManager wifiManager;
  private Button open;
  private boolean flag= false ;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
   // TODO Auto-generated method stub
   super .onCreate(savedInstanceState);
   setContentView(R.layout.main);
   //獲取wifi管理服務
   wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
   open=(Button)findViewById(R.id.open_hotspot);
   //通過按鈕事件設置熱點
   open.setOnClickListener( new View.OnClickListener() {
    @Override
    public void onClick(View v) {
     //如果是打開狀態就關閉,如果是關閉就打開
     flag=!flag;
     setWifiApEnabled(flag);
    }
   });
  }
  // wifi熱點開關
  public boolean setWifiApEnabled( boolean enabled) {
   if (enabled) { // disable WiFi in any case
    //wifi和熱點不能同時打開,所以打開熱點的時候需要關閉wifi
    wifiManager.setWifiEnabled( false );
   }
   try {
    //熱點的配置類
    WifiConfiguration apConfig = new WifiConfiguration();
    //配置熱點的名稱(可以在名字后面加點隨機數什么的)
    apConfig.SSID = "YRCCONNECTION" ;
    //配置熱點的密碼
    apConfig.preSharedKey= "12122112" ;
     //通過反射調用設置熱點
    Method method = wifiManager.getClass().getMethod(
      "setWifiApEnabled" , WifiConfiguration. class , Boolean.TYPE);
    //返回熱點打開狀態
    return (Boolean) method.invoke(wifiManager, apConfig, enabled);
   } catch (Exception e) {
    return false ;
   }
  }
}
 
連接熱點的流程首先是搜索熱點然后再判斷熱點是否符合規則然后再進行連接。
 
package com.tel.lajoin.wifiscan;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
public class MainActivity extends Activity {
   private List<ScanResult> wifiList;
   private WifiManager wifiManager;
   private List<String> passableHotsPot;
   private WifiReceiver wifiReceiver;
   private boolean isConnected= false ;
   private Button connect;
   @Override
   public void onCreate(Bundle savedInstanceState) {
     super .onCreate(savedInstanceState);
     init();
   }
   /* 初始化參數 */
   public void init() {
     setContentView(R.layout.main);
     connect=(Button)findViewById(R.id.connect);
     wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
     wifiReceiver = new WifiReceiver();
     //通過按鈕事件搜索熱點
     connect.setOnClickListener( new View.OnClickListener() {
       @Override
       public void onClick(View v) {
         wifiManager.startScan();
       }
     });   
   }
   /* 監聽熱點變化 */
   private final class WifiReceiver extends BroadcastReceiver {
     @Override
     public void onReceive(Context context, Intent intent) {
       wifiList = wifiManager.getScanResults();
       if (wifiList == null || wifiList.size() == 0 || isConnected)
         return ;
       onReceiveNewNetworks(wifiList);
     }
   }
   /*當搜索到新的wifi熱點時判斷該熱點是否符合規格*/
   public void onReceiveNewNetworks(List<ScanResult> wifiList){
     passableHotsPot= new ArrayList<String>();
     for (ScanResult result:wifiList){
       System.out.println(result.SSID);
       if ((result.SSID).contains( "YRCCONNECTION" ))
         passableHotsPot.add(result.SSID);
     }
     synchronized ( this ) {
       connectToHotpot();
     }
   }
   /*連接到熱點*/
   public void connectToHotpot(){
     if (passableHotsPot== null || passableHotsPot.size()== 0 )
       return ;
     WifiConfiguration wifiConfig= this .setWifiParams(passableHotsPot.get( 0 ));
     int wcgID = wifiManager.addNetwork(wifiConfig);
     boolean flag=wifiManager.enableNetwork(wcgID, true );
     isConnected=flag;
     System.out.println( "connect success? " +flag);
   }
   /*設置要連接的熱點的參數*/
   public WifiConfiguration setWifiParams(String ssid){
     WifiConfiguration apConfig= new WifiConfiguration();
     apConfig.SSID= "\"" +ssid+ "\"" ;
     apConfig.preSharedKey= "\"12122112\"" ;
     apConfig.hiddenSSID = true ;
     apConfig.status = WifiConfiguration.Status.ENABLED;
     apConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
     apConfig.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
     apConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
     apConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
     apConfig.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
     apConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
     return apConfig;
   }
   @Override
   protected void onDestroy() {
     super .onDestroy();
     /*銷毀時注銷廣播*/
     unregisterReceiver(wifiReceiver);
   }
}
 
 
https://www.jb51.net/article/140528.htm
 
   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM