Keb*_*man 2 android android-networking
我正在使用一些代码来检测移动数据和蜂窝网络是否可用,如下所示:
final ConnectivityManager connection_manager =
(ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
boolean mobileDataEnabled = false;
try {
Class cmClass = Class.forName(connection_manager.getClass().getName());
Method method = cmClass.getDeclaredMethod("getMobileDataEnabled");
method.setAccessible(true); // Make the method callable
// get the setting for "mobile data"
mobileDataEnabled = (Boolean)method.invoke(connection_manager);
} catch (Exception e) {
}
if(mobileDataEnabled == true) {
Log.d(TAG, "mobileDataEnabled == true");
} else {
Log.d(TAG, "mobileDataEnabled == false");
}
NetworkRequest.Builder request = new NetworkRequest.Builder();
request.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
connection_manager.requestNetwork(request.build(), new ConnectivityManager.NetworkCallback()
{
@Override
public void onAvailable(Network network)
{Log.d(TAG, "requestNetwork onAvailable()");}
@Override
public void onCapabilitiesChanged (Network network, NetworkCapabilities networkCapabilities)
{Log.d(TAG, "requestNetwork onCapabilitiesChanged()");}
@Override
public void onLinkPropertiesChanged (Network network, LinkProperties linkProperties)
{Log.d(TAG, "requestNetwork onLinkPropertiesChanged()");}
@Override
public void onLosing (Network network, int maxMsToLive)
{Log.d(TAG, "requestNetwork onLosing()");}
@Override
public void onLost (Network network)
{Log.d(TAG, "requestNetwork onLost()");}
});
Run Code Online (Sandbox Code Playgroud)
到目前为止,这已经正常工作,如果可以使用移动数据,则会触发onAvailable()回调.但是,我刚刚尝试使用android 7设备,虽然mobileDataEnabled设置为true,表明网络可用,但没有任何requestNetwork()回调被触发.
有谁知道这个领域的android 7中是否有任何变化?我至少会期待一个回调被调用,但什么都没有回来.
我找到了答案..我只需要将NET_CAPABILITY_INTERNET添加到请求构建器中,如下所示:
request.addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2693 次 |
| 最近记录: |