开启android手机的wifi热点

因为无线wifi不能和wufi热点同时打开,所以开启wifi热点的时候要监测是否打开了wifi,打开了就要关闭


wifiManager = (WifiManager) this.getSystemService(Context.WIFI_SERVICE);

	private void startWifiAp() {
		handler = new Handler();
		if (wifiManager.isWifiEnabled()) {
			closeWifiHandler = new Handler() {
				@Override
				public void handleMessage(Message msg) {
					startWifiApTh();
					super.handleMessage(msg);
				}
			};
			cwt = new CloseWifiThread();
			Thread thread = new Thread(cwt);
			thread.start();

		}else{
			startWifiApTh();
		}


	}

	class CloseWifiThread implements Runnable {
		public CloseWifiThread() {
			super();
		}

		@Override
		public void run() {
			int state = wifiManager.getWifiState();
			if (state == WifiManager.WIFI_STATE_ENABLED) {
				wifiManager.setWifiEnabled(false);
				closeWifiHandler.postDelayed(cwt, 1000);
			} else if (state == WifiManager.WIFI_STATE_DISABLING) {
				closeWifiHandler.postDelayed(cwt, 1000);
			}else if(state == WifiManager.WIFI_STATE_DISABLED){
				closeWifiHandler.sendEmptyMessage(0);
			}

		}
	}

	private void startWifiApTh(){
		swat = new StratWifiApThread();
		Thread thread = new Thread(swat);
		thread.start();
	}
	class StratWifiApThread implements Runnable {
		public StratWifiApThread() {
			super();
		}

		@Override
		public void run() {
			// TODO Auto-generated method stub
			WifiUtil mWifiUtil = new WifiUtil();
			int state = mWifiUtil.getWifiApState(wifiManager);
			if (state == WifiUtil.WIFI_AP_STATE_DISABLED) {
				mWifiUtil.stratWifiAp(wifiManager);
				handler.postDelayed(swat, 1000);
			} else if (state == WifiUtil.WIFI_AP_STATE_ENABLING
					|| state == WifiUtil.WIFI_AP_STATE_FAILED) {
				handler.postDelayed(swat, 1000);
			}else if (state == WifiUtil.WIFI_AP_STATE_ENABLED){
				Toast.makeText(ActivityForAndroid.this, "已开启wlan热点", 2000).show();
			}
		}

	}

public class WifiUtil {

	public static final int WIFI_AP_STATE_DISABLING = 0;
	public static final int WIFI_AP_STATE_DISABLED = 1;
	public static final int WIFI_AP_STATE_ENABLING = 2;
	public static final int WIFI_AP_STATE_ENABLED = 3;
	public static final int WIFI_AP_STATE_FAILED = 4;

	public void stratWifiAp(WifiManager wifiManager) {
		// WifiManager wifi = (WifiManager)
		// getSystemService(Context.WIFI_SERVICE);
		// wifiManager.setWifiEnabled(false);
		Method method1 = null;
		try {
			method1 = wifiManager.getClass().getMethod("setWifiApEnabled",
					WifiConfiguration.class, boolean.class);
			WifiConfiguration netConfig = new WifiConfiguration();
			//wifi热点名字
			netConfig.SSID = "\" T  E S T \"";
			netConfig.allowedAuthAlgorithms
					.set(WifiConfiguration.AuthAlgorithm.OPEN);
			netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
			netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
			netConfig.allowedKeyManagement
					.set(WifiConfiguration.KeyMgmt.WPA_PSK);
			netConfig.allowedPairwiseCiphers
					.set(WifiConfiguration.PairwiseCipher.CCMP);
			netConfig.allowedPairwiseCiphers
					.set(WifiConfiguration.PairwiseCipher.TKIP);
			netConfig.allowedGroupCiphers
					.set(WifiConfiguration.GroupCipher.CCMP);
			netConfig.allowedGroupCiphers
					.set(WifiConfiguration.GroupCipher.TKIP);
			//密码
			netConfig.preSharedKey = "\"11111111\"";

			method1.invoke(wifiManager, netConfig, true);
			// Method method2 =
			// wifiManager.getClass().getMethod("getWifiApState");
			// int state = (Integer) method2.invoke(wifiManager);
			// Log.i("wifi state" + state);
		} catch (IllegalArgumentException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (SecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}

	public int getWifiApState(WifiManager wifiManager) {
		try {
			Method method = wifiManager.getClass().getMethod("getWifiApState");
			int i = (Integer) method.invoke(wifiManager);
			Log.i("wifi state:  " + i);
			return i;
		} catch (Exception e) {
			Log.i("Cannot get WiFi AP state" + e);
			return WIFI_AP_STATE_FAILED;
		}
	}
}

上面的代码用到handler每隔1秒post线程来监测是否关闭了wifi 和是否打开了wifi热点..不知道还有没有其他更好的方法..


wifiutil类的打开wifi热点的代码用到java的反射类 还在学习..


  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
要实现两台Android手机之间的WiFi热点通信,可以使用Android提供的Socket API和WifiManager API。 以下是基本步骤: 1. 创建WiFi热点 在一个手机上打开WiFi热点。您可以通过使用WifiManager类中的setWifiApEnabled()方法来创建WiFi热点。例如: ``` WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiConfiguration wifiConfig = new WifiConfiguration(); wifiConfig.SSID = "MyWifiHotspot"; wifiConfig.preSharedKey = "password"; wifiConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN); wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA); wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); Method setWifiApMethod = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class); setWifiApMethod.invoke(wifiManager, wifiConfig, true); ``` 2. 连接到WiFi热点 在另一个手机上连接到WiFi热点。您可以使用WifiManager类中的addNetwork()、enableNetwork()和reconnect()方法来连接到WiFi热点。例如: ``` WifiManager wifiManager = (WifiManager) getSystemService(Context.WIFI_SERVICE); WifiConfiguration wifiConfig = new WifiConfiguration(); wifiConfig.SSID = "MyWifiHotspot"; wifiConfig.preSharedKey = "password"; wifiConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN); wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN); wifiConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA); wifiConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK); int networkId = wifiManager.addNetwork(wifiConfig); wifiManager.disconnect(); wifiManager.enableNetwork(networkId, true); wifiManager.reconnect(); ``` 3. 创建Socket连接 使用Socket API在两个手机之间创建Socket连接。在一个手机上作为服务器,另一个手机作为客户端。例如: 在服务器端: ``` ServerSocket serverSocket = new ServerSocket(8888); Socket socket = serverSocket.accept(); ``` 在客户端: ``` Socket socket = new Socket(serverIpAddress, 8888); ``` 4. 通过Socket传输数据 在Socket连接建立后,可以使用输入流和输出流来传输数据。在服务器端和客户端都需要使用输入流和输出流。例如: 在服务器端: ``` DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream()); dataOutputStream.writeUTF("Hello from server"); dataOutputStream.flush(); DataInputStream dataInputStream = new DataInputStream(socket.getInputStream()); String message = dataInputStream.readUTF(); ``` 在客户端: ``` DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream()); dataOutputStream.writeUTF("Hello from client"); dataOutputStream.flush(); DataInputStream dataInputStream = new DataInputStream(socket.getInputStream()); String message = dataInputStream.readUTF(); ``` 以上就是Android两台手机之间通过WiFi热点通信的基本步骤。
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值