前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android 通过代码设置、打开wifi热点及热点连接的实现代码

Android 通过代码设置、打开wifi热点及热点连接的实现代码

作者头像
砸漏
发布2020-11-05 11:00:48
6.1K1
发布2020-11-05 11:00:48
举报
文章被收录于专栏:恩蓝脚本

用过快牙的朋友应该知道它们在两天设备之间传输文件的时候使用的是wifi热点,然后另一台便连接这个热点再进行传输。快牙传输速度惊人应该跟它的这种机制有关系吧。不知道它的搜索机制是怎样的,但我想应该可以通过热点的名字来进行判断吧。下面我们就来探讨一下如何自动创建一个wifi热点吧大笑

创建wifi热点首先需要手机支持,建议开发的哥们整个好点的手机,我们公司那些个山寨设备,几近有一半是不支持热点的;其实创建热点很简单,先获取到wifi的服务,再配置热点名称、密码等等,然后再通过反射打开它就OK了。

下面我们看看创建热点的代码实现:

代码语言:javascript
复制
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; 
  } 
 } 
} 

布局就不写了吧,就一按钮,人人都知道的东西,写了也没啥意思。要实现文件传输,当然我们还需要写一个连接热点的客户端吧。连接热点的流程首先是搜索热点然后再判断热点是否符合规则然后再进行连接。

代码语言:javascript
复制
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); 
} 
}

代码很简单,而且都有注释的,相信大伙儿能够看明白。 那就这样吧,至于文件传输建议还是去看看socket相关的文章吧。

总结

以上所述是小编给大家介绍的Android 通过代码设置、打开wifi热点及热点的连接的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对ZaLou.Cn网站的支持!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-09-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档