下面我们看看创建热点的代码实现:
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
