可以通过反射startTethering这个方法打开热点,之前的博客找不到了,前段时间才用过,现在忘的差不多了,好像有些权限和这个依赖
implementation 'com.google.dexmaker:dexmaker:1.2'
下面是使用示例。
/**
* 打开WiFi热点
* @param context
*/
public static void startTethering(Context context) {
//1、环境属性记录
String property = System.getProperty("dexmaker.dexcache");
//2、设置新的属性
System.setProperty("dexmaker.dexcache", context.getCacheDir().getPath());
//3、反射操作打开热点
ConnectivityManager connectivityManager = ((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE));
try {
Class classOnStartTetheringCallback = Class.forName("android.net.ConnectivityManager$OnStartTetheringCallback");
Method startTethering = connectivityManager.getClass().getDeclaredMethod("startTethering", int.class, boolean.class, classOnStartTetheringCallback);
Object proxy = ProxyBuilder.forClass(classOnStartTetheringCallback).handler(new InvocationHandler() {
@Override
public Object invoke(Object o, Method method, Object[] objects) throws Throwable {
return null;
}
}).build();
startTethering.invoke(connectivityManager, 0, false, proxy);
} catch (Exception e) {
e.printStackTrace();
}
//4、恢复环境属性
if (property != null) {
System.setProperty("dexmaker.dexcache", property);
}
}