Android热点相关功能开发

本文中所用到的方法,在MT6582平台、API19测试可行,其它平台不一定可以,要具体测。

附一个MT6582源码的链接https://github.com/CM-Huawei/Source_MT6582

下面我把我封装的热点管理类贴出来,可以实现热点相关的所有功能(除了设置最大允许连接数和一定时间无设备连接后关闭热点的功能),包括打开、关闭热点,设置热点名称、密码,禁用、解除禁用某个设备。


注:

1.HotspotClient类,在源码中放在android.net.wifi包下,所以新建android.net.wifi的包用来存放,否则可能会出问题;

2.这里面好几个方法我都是通过遍历WifiManager的所有方法获取的,因为我在直接获取的时候总会报NoSuchMethodException,不明白原因;

3.使用的时候,mWifiManager根据自己项目的实际情况不要忘记初始化就好。



import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

import android.util.Log;

import android.net.wifi.HotspotClient;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;

public class HotspotManager {
	private static final String Tag = "HotspotManager";
	public static WifiManager mWifiManager;

	/**
	 * 设置热点状态,会对应的打开或关闭WiFi
	 * 
	 * @param state
	 *            要设置的状态
	 * @param ssid
	 *            热点名称,can be null
	 * @param pwd
	 *            热点密码,can be null
	 * @return 设置成功与否
	 */
	public static boolean setHotPotState(boolean state, String ssid, String pwd) {
		boolean isOpened = isHotPotTurnedOn();
		if (state == isOpened) {
			Log.i(Tag, "-> Set state is equal with hotpot state!");
			return false;
		}

		Log.i(Tag, "set hot pot state : " + state);
		try {
			WifiConfiguration apConfig = getHotPotConfig();
			
			// 通过反射调用设置热点
			Method method = WifiManager.class.getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);

			mWifiManager.setWifiEnabled(!state);
			if (ssid != null) {
				apConfig.SSID = ssid;
			}

			if (pwd != null) {
				apConfig.preSharedKey = pwd;
			}

			return (boolean) method.invoke(mWifiManager, apConfig, state);
		} catch (Exception e) {
			Log.e(Tag, "Set hot pot " + state + " got exception : " + e.getLocalizedMessage());
			return false;
		}

	}

	/**
	 * 热点是否打开
	 * @return
	 */
	public static boolean isHotPotTurnedOn() {
		try {
			Method method = mWifiManager.getClass().getDeclaredMethod("isWifiApEnabled");
			// 调用getWifiApState() ,获取返回值
			return (boolean) method.invoke(mWifiManager);
		} catch (Exception e) {
			Log.i(Tag, "Get hot pot state exception -> " + e.getLocalizedMessage());
			return false;
		}
	}

	/**
	 * 获取当前热点的配置参数
	 * 
	 * @return
	 */
	public static HotspotParam getHotPotParams() {
		try {
			HotspotParam param = new HotspotParam();

			
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值