android开启手机wifi热点和连接到wifi热点

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.net.wifi.ScanResult;
import android.net.wifi.WifiConfiguration;
import android.net.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);  
	}
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值