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