我想以这种方式联系路由器:
isReachable = InetAddress.getByName("192.168.1.1").isReachable(2000);
但它返回false。
奇怪的是,当我手动关闭LTE数据时,它可以工作。
我发现此代码以编程方式打开/关闭LTE数据,但它在Android 6或7上不起作用。
private void setMobileDataEnabled(Context context, boolean enabled)
{
final ConnectivityManager conman = (ConnectivityManager)
final ConnectivityManager conman = (ConnectivityManager)
context.getSystemService(Context.CONNECTIVITY_SERVICE);
final Class conmanClass = Class.forName(conman.getClass().getName());
final Field iConnectivityManagerField =
conmanClass.getDeclaredField("mService");
iConnectivityManagerField.setAccessible(true);
final Class iConnectivityManagerClass =
Class.forName(iConnectivityManager.getClass().getName());
final Method setMobileDataEnabledMethod =
iConnectivityManagerClass.getDeclaredMethod("setMobileDataEnabled",
Boolean.TYPE);
setMobileDataEnabledMethod.setAccessible(true);
setMobileDataEnabledMethod.invoke(iConnectivityManager, enabled);
}
你能帮忙找到另一种在Android 6或7上打开/关闭LTE数据的方法吗?
答案 0 :(得分:1)
我找到了解决问题的方法。我无法以编程方式关闭手机数据,但如果找到一种方法强制我的应用程序只使用wifi连接。这是代码:
final ConnectivityManager connectivityManager =
(ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkRequest.Builder request = null;
if (android.os.Build.VERSION.SDK_INT >=
android.os.Build.VERSION_CODES.LOLLIPOP) {
request = new NetworkRequest.Builder();
request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI);
connectivityManager.registerNetworkCallback(request.build(), new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(Network network) {
//if (SDK_INT >= LOLLIPOP && SDK_INT <= M) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
ConnectivityManager.setProcessDefaultNetwork(network);
}
}
});
}