在Android 5 +

时间:2015-12-23 13:02:00

标签: java android networking mobile connection

我们正在制作一款应用程序,即使连接了WiFi,也需要切换到蜂窝网络以满足某些要求。 根据{{​​1}}文档,现在不推荐使用以下方法,但对于使用的内容不太清楚。

ConnectionManager

这些方法在android 5/6中仍然有用吗?如果有人有信息或东西替换这些方法,我将非常感激!

关于这个问题,请稍微多一点:) 我已设法调查ConnectivityManager并可以使用以下方式查看网络:

  public void useMobileNetworkMode(Context context) {
    ConnectivityManager  cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    cm.setNetworkPreference(ConnectivityManager.TYPE_MOBILE);
}

public void useDefaultNetworkMode(Context context) {
    ConnectivityManager  cm = (ConnectivityManager)context.getSystemService(Context.CONNECTIVITY_SERVICE);
    cm.setNetworkPreference(ConnectivityManager.DEFAULT_NETWORK_PREFERENCE);

}

在这里,我有点卡住了,因为从 Network networkToUse = null; Network[] networks; networks = cm.getAllNetworks(); for (Network network : networks) { NetworkInfo ni = cm.getNetworkInfo(network); Log.e("NETWORKINFO", ni.getType() + " " + ni.getExtraInfo()); if (ni.getType()== ConnectivityManager.TYPE_WIFI) { Log.e("NETWORKINFO", "isWifi"); if (ni.isConnected()) { Log.e("NETWORKINFO", "and is connected"); if (networkToUse == null) { networkToUse = network; } } } if (ni.getType()== ConnectivityManager.TYPE_MOBILE) { Log.e("NETWORKINFO", "HasMobile"); if (ni.isConnected()) { Log.e("NETWORKINFO", "and is connected"); networkToUse = network; } } } 执行HttpsURLConnection时,我无法从逻辑上看到告诉应用使用其中一种网络的方法。

更新: 我刚注意到移动设备在WiFi连接后不久就消失了。有一个时刻,我得到了两个但不是很久。

我也试过这个:

URL.openLink();

但与网络的“列表”一样,“在之前的尝试中,我只进行了1次回调,即使移动数据也已开启。

UPDATE; 好吧,我似乎看到移动有时使用上述方法。但它似乎创造了API级别的意大利面条地狱。移动回叫有时也需要很长时间才能触发。我想知道这是因为它必须唤醒蜂窝调制解调器并等待它的握手或什么?

UPDATE; 我有另一个可能的建议使用套接字(我很少有经验...)

是否有人知道是否可以使用 final ConnectivityManager connection_manager = (ConnectivityManager)httpsClient.getCheckoutController().getCheckout().getCurrentActivity().getApplication().getSystemService(Context.CONNECTIVITY_SERVICE); NetworkRequest.Builder request = new NetworkRequest.Builder(); request.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); connection_manager.registerNetworkCallback(request.build(), new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { Log.e("NETWORKINFO", "FOUND A CELLULAR NETWORK " + connection_manager.getNetworkInfo(network)); } }); request = new NetworkRequest.Builder(); request.addTransportType(NetworkCapabilities.TRANSPORT_WIFI); connection_manager.registerNetworkCallback(request.build(), new ConnectivityManager.NetworkCallback() { @Override public void onAvailable(Network network) { Log.e("NETWORKINFO", "FOUND A WIFI NETWORK "+connection_manager.getNetworkInfo(network)); } }); HttpsURLConnection.getSocketFactory()构建CELLULAR SSL连接套接字以执行https请求?

在本周漫长的任务中,任何信息都会非常受欢迎:D

更新: 从谷歌的某个人那里找到了一个好的和绝对的答案: How to stay connected through mobile network after WIFI is connected on Android?

然而,在实施之后,我获得了移动设备的网络回调,但是当我打开URL连接并执行请求时,它似乎在我得到响应之前就已经卡住了很长时间(大约4分钟)。

我有华为5.0.1手机,这是我有的最高手机。显然这不好。然而,它没有在5.1 galaxy S6上测试并且可以工作..所以可能是手机。

2 个答案:

答案 0 :(得分:0)

根据Android文档,它不再适用于Android 5及更高版本。

  

此方法在API级别21中已弃用。

     

功能已被删除,因为它不再有意义,有更多>而不是两个网络 - 我们需要一个数组来表达偏好。相反,我们使用网络的动态网络属性来描述其>优先级。

答案 1 :(得分:0)

在Google上找到一个好的和绝对的答案:如何在Android上连接WIFI后通过移动网络保持联系?

(链接在上面的编辑信息中)

然而,在实施之后,我获得了移动设备的网络回调,但是当我打开URL连接并执行请求时,它似乎在我得到响应之前就已经卡住了很长时间(大约4分钟)。

我有华为5.0.1手机,这是我有的最高手机。显然这不好。然而,它没有在5.1 galaxy S6上进行测试并起作用..所以可能是手机。