下面我們看看創建熱點的代碼實現:
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