Android 通过代码设置、打开wifi热点及热点连接的实现代码
用过快牙的朋友应该知道它们在两天设备之间传输文件的时候使用的是wifi热点,然后另一台便连接这个热点再进行传输。快牙传输速度惊人应该跟它的这种机制有关系吧。不知道它的搜索机制是怎样的,但我想应该可以通过热点的名字来进行判断吧。下面我们就来探讨一下如何自动创建一个wifi热点吧大笑
创建wifi热点首先需要手机支持,建议开发的哥们整个好点的手机,我们公司那些个山寨设备,几近有一半是不支持热点的;其实创建热点很简单,先获取到wifi的服务,再配置热点名称、密码等等,然后再通过反射打开它就OK了。
下面我们看看创建热点的代码实现:
packagecom.tel.lajoin.wifi.hotspot;
importjava.lang.reflect.Method;
importandroid.app.Activity;
importandroid.content.Context;
importandroid.net.wifi.WifiConfiguration;
importandroid.net.wifi.WifiManager;
importandroid.os.Bundle;
importandroid.view.View;
importandroid.widget.Button;
publicclassHotspotActivityextendsActivity{
privateWifiManagerwifiManager;
privateButtonopen;
privatebooleanflag=false;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
//TODOAuto-generatedmethodstub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//获取wifi管理服务
wifiManager=(WifiManager)getSystemService(Context.WIFI_SERVICE);
open=(Button)findViewById(R.id.open_hotspot);
//通过按钮事件设置热点
open.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
//如果是打开状态就关闭,如果是关闭就打开
flag=!flag;
setWifiApEnabled(flag);
}
});
}
//wifi热点开关
publicbooleansetWifiApEnabled(booleanenabled){
if(enabled){//disableWiFiinanycase
//wifi和热点不能同时打开,所以打开热点的时候需要关闭wifi
wifiManager.setWifiEnabled(false);
}
try{
//热点的配置类
WifiConfigurationapConfig=newWifiConfiguration();
//配置热点的名称(可以在名字后面加点随机数什么的)
apConfig.SSID="YRCCONNECTION";
//配置热点的密码
apConfig.preSharedKey="12122112";
//通过反射调用设置热点
Methodmethod=wifiManager.getClass().getMethod(
"setWifiApEnabled",WifiConfiguration.class,Boolean.TYPE);
//返回热点打开状态
return(Boolean)method.invoke(wifiManager,apConfig,enabled);
}catch(Exceptione){
returnfalse;
}
}
}
布局就不写了吧,就一按钮,人人都知道的东西,写了也没啥意思。要实现文件传输,当然我们还需要写一个连接热点的客户端吧。连接热点的流程首先是搜索热点然后再判断热点是否符合规则然后再进行连接。
packagecom.tel.lajoin.wifiscan;
importjava.util.ArrayList;
importjava.util.List;
importandroid.app.Activity;
importandroid.content.BroadcastReceiver;
importandroid.content.Context;
importandroid.content.Intent;
importandroid.content.IntentFilter;
importandroid.net.wifi.ScanResult;
importandroid.net.wifi.WifiConfiguration;
importandroid.net.wifi.WifiManager;
importandroid.os.Bundle;
publicclassMainActivityextendsActivity{
privateListwifiList;
privateWifiManagerwifiManager;
privateListpassableHotsPot;
privateWifiReceiverwifiReceiver;
privatebooleanisConnected=false;
privateButtonconnect;
@Override
publicvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
init();
}
/*初始化参数*/
publicvoidinit(){
setContentView(R.layout.main);
connect=(Button)findViewById(R.id.connect);
wifiManager=(WifiManager)getSystemService(Context.WIFI_SERVICE);
wifiReceiver=newWifiReceiver();
//通过按钮事件搜索热点
connect.setOnClickListener(newView.OnClickListener(){
@Override
publicvoidonClick(Viewv){
wifiManager.startScan();
}
});
}
/*监听热点变化*/
privatefinalclassWifiReceiverextendsBroadcastReceiver{
@Override
publicvoidonReceive(Contextcontext,Intentintent){
wifiList=wifiManager.getScanResults();
if(wifiList==null||wifiList.size()==0||isConnected)
return;
onReceiveNewNetworks(wifiList);
}
}
/*当搜索到新的wifi热点时判断该热点是否符合规格*/
publicvoidonReceiveNewNetworks(ListwifiList){
passableHotsPot=newArrayList();
for(ScanResultresult:wifiList){
System.out.println(result.SSID);
if((result.SSID).contains("YRCCONNECTION"))
passableHotsPot.add(result.SSID);
}
synchronized(this){
connectToHotpot();
}
}
/*连接到热点*/
publicvoidconnectToHotpot(){
if(passableHotsPot==null||passableHotsPot.size()==0)
return;
WifiConfigurationwifiConfig=this.setWifiParams(passableHotsPot.get(0));
intwcgID=wifiManager.addNetwork(wifiConfig);
booleanflag=wifiManager.enableNetwork(wcgID,true);
isConnected=flag;
System.out.println("connectsuccess?"+flag);
}
/*设置要连接的热点的参数*/
publicWifiConfigurationsetWifiParams(Stringssid){
WifiConfigurationapConfig=newWifiConfiguration();
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);
returnapConfig;
}
@Override
protectedvoidonDestroy(){
super.onDestroy();
/*销毁时注销广播*/
unregisterReceiver(wifiReceiver);
}
}
代码很简单,而且都有注释的,相信大伙儿能够看明白。 那就这样吧,至于文件传输建议还是去看看socket相关的文章吧。
总结
以上所述是小编给大家介绍的Android通过代码设置、打开wifi热点及热点的连接的实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!