我在Android的网站上看到了许多关于本地Only Hotspot 的参考资料
然而,我需要从后台服务以编程方式管理蜂窝热点,就像我可以从下拉菜单手动管理一样。
这以前是这样做的:
method = wifiManager.getClass().getDeclaredMethod("setWifiApEnabled", WifiConfiguration.class, Boolean.TYPE);
method.invoke(wifiManager, wifiConfiguration, activated);
但是,此功能已被弃用。
我的无线服务提供商(AT&T(正试图根据连接的设备和方式向我收取不同的费用。网络应该对设备是不可知的,只需将我的数据包传输到它们的目的地。我希望这与此无关,但我担心我们会失去对设备的控制。
Android真的不提供简单的API调用来管理热点吗?
只有特权应用程序才能在Android中启用/禁用热点。如果你碰巧正在开发这样一个应用程序(或者有一个根设备(,你可以使用以下API。
如果使用Android版本>=11
您可以在此处使用TetheringManager#startTethering
代码启动热点。
类似地,这里有一个TetheringManager#stopTethering
方法的代码。这将停止热点。
如果使用Android版本<11
ConnectivityManager#startTethering
可用于此处的代码详细信息。同样,这里也有一个带有代码的ConnectivityManager#stopTethering
方法。
您的应用程序需要以下两个权限(仅适用于系统应用程序(:
- android.permission.TETHER_PRIVILEGED
- android.permission.WRITE_SETTINGS
一旦你获得了这些权限,你可以尝试以下(kotlin(:
fun startTethering(ctx: Context) {
val o = ctx.getSystemService(Context.CONNECTIVITY_SERVICE)
for (m in o.javaClass.methods) {
if (m.name.equals("tether")) {
try {
m.invoke(o, "eth0") // or whatever you know the iface to be
} catch (e: IllegalArgumentException) {
e.printStackTrace()
} catch (e: IllegalAccessException) {
e.printStackTrace()
} catch (e: InvocationTargetException) {
val target = e.targetException
Log.e("tethering", "target: ${target.message}")
e.printStackTrace()
}
}
}
}
如果您想让代码解开iface,请使用与上面相同的代码,但将"系绳"替换为"解开"。
我只在安卓11上测试过这个代码。您的里程数可能有所不同。