1、如何开启手机wifi热点:
先获取到wifi的服务,在配置热点的名称,密码,然后通过反射来打开它就ok了。
private boolean openWifi(boolean enabled) {
// TODO Auto-generated method stub
if (enabled) { // disable WiFi in any case
// wifi和热点不能同时打开,所以打开热点的时候需要关闭wifi
mWifiManager.setWifiEnabled(false);
}
try {
// 热点的配置类
WifiConfiguration apConfig = new WifiConfiguration();
// 配置热点的名称(可以在名字后面加点随机数什么的)
apConfig.SSID = "hym7";
// 配置热点的密码
apConfig.preSharedKey = "huyongming7";
apConfig.allowedKeyManagement
.set(WifiConfiguration.KeyMgmt.WPA_PSK);
// 通过反射调用设置热点
Method method = mWifiManager.getClass().getMethod(
"setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
// 返回热点打开状态
return (Boolean) method.invoke(mWifiManager, apConfig, enabled);
} catch (Exception e) {
return false;
}
}
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
需要注意的是:开启wifi热点要关闭wifi,否则热点开启不成功。
wifi热点有三种安全类型,我们选择的是WPA_PSK。选择不同的方式,有不同的连接设置。
2、连接到wifi
大概的思路就是,扫描wifi热点,然后在广播中获取热点的集合,从中找出名字和我们设置的wifi热点一样的,进行连接。
package com.hym.myandroid.activity;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;
import com.hym.myandroid.R;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.wifi.ScanResult;
import android.wifi.WifiConfiguration;
import android.wifi.WifiManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
public class WifiActivity extends BaseActivity {
private WifiManager mWifiManager;
private List<ScanResult> wifiList;
private List<String> passableHotsPot;
private WifiReceiver wifiReceiver;
private boolean isConnected = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wifi);
initView();
mWifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE);
wifiReceiver = new WifiReceiver();
registerReceiver(wifiReceiver, new IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
}
private void initView() {
// TODO Auto-generated method stub
findViewById(R.id.btn_open_wifi).setOnClickListener(this);
findViewById(R.id.btn_connect_wifi).setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btn_open_wifi:
if(openWifi(true)){
Toast.makeText(getApplicationContext(), "ok", 0).show();
}else{
Toast.makeText(getApplicationContext(), "false", 0).show();
}
break;
case R.id.btn_connect_wifi:
mWifiManager.startScan();
break;
default:
break;
}
super.onClick(v);
}
private boolean openWifi(boolean enabled) {
// TODO Auto-generated method stub
if (enabled) { // disable WiFi in any case
// wifi和热点不能同时打开,所以打开热点的时候需要关闭wifi
mWifiManager.setWifiEnabled(false);
}
try {
// 热点的配置类
WifiConfiguration apConfig = new WifiConfiguration();
// 配置热点的名称(可以在名字后面加点随机数什么的)
apConfig.SSID = "hym7";
// 配置热点的密码
apConfig.preSharedKey = "huyongming7";
apConfig.allowedKeyManagement
.set(WifiConfiguration.KeyMgmt.WPA_PSK);
// 通过反射调用设置热点
Method method = mWifiManager.getClass().getMethod(
"setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
// 返回热点打开状态
return (Boolean) method.invoke(mWifiManager, apConfig, enabled);
} catch (Exception e) {
return false;
}
}
private WifiConfiguration IsExsits(String SSID) {
List<WifiConfiguration> existingConfigs = mWifiManager.getConfiguredNetworks();
for (WifiConfiguration existingConfig : existingConfigs) {
if (existingConfig.SSID.equals("\"" + SSID + "\"") /*&& existingConfig.preSharedKey.equals("\"" + password + "\"")*/) {
return existingConfig;
}
}
return null;
}
/* 监听热点变化 */
private final class WifiReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
wifiList = mWifiManager.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) {
Log.d("wificonnect", result.SSID);
if ((result.SSID).contains("hym7"))
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 = mWifiManager.addNetwork(wifiConfig);
boolean flag = mWifiManager.enableNetwork(wcgID, true);
isConnected = flag;
Log.d("wificonnect", "enableNetwork "+flag);
flag = mWifiManager.reconnect();
Log.d("wificonnect", "reconnect "+flag);
}
/* 设置要连接的热点的参数 */
public WifiConfiguration setWifiParams(String ssid) {
WifiConfiguration config = new WifiConfiguration();
config.allowedAuthAlgorithms.clear();
config.allowedGroupCiphers.clear();
config.allowedKeyManagement.clear();
config.allowedPairwiseCiphers.clear();
config.allowedProtocols.clear();
config.SSID = "\"" + ssid + "\"";
config.preSharedKey = "\"" + "huyongming7" + "\"";
config.hiddenSSID = true;
config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
// 此处需要修改否则不能自动重联
// config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
config.status = WifiConfiguration.Status.ENABLED;
return config;
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
unregisterReceiver(wifiReceiver);
}
}
更多推荐
android开启手机wifi热点和连接到wifi热点
发布评论