在ICS中不推荐使用ConnectivityManager.getBackgroundDataSetting();如何使用getActiveNetworkInfo()代替

时间:2012-07-11 22:45:34

标签: android sync android-4.0-ice-cream-sandwich

根据ConnectivityManager的Android SDK文档,Android 4.x中不推荐使用getBackgroundDataSetting(),而应使用getActiveNetworkInfo()来查看是否禁用了后台数据:

http://developer.android.com/reference/android/net/ConnectivityManager.html#getBackgroundDataSetting()

但是,在关闭同步时,当我在服务中查询NetworkInfo对象时,没有任何暗示后台数据被禁用的内容:

ConnectivityManager connMgr = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
// getBackgroundDataSetting always returns true on Android 4.x
if (connMgr != null && !connMgr.getBackgroundDataSetting()) {
    Log.i(WootsUp.TAG, "background data off");
    return;
}

if (connMgr != null) {
    NetworkInfo netInfo = connMgr.getActiveNetworkInfo();
    if (netInfo == null || netInfo.isAvailable() == false || netInfo.isConnected() == false) {
        Log.i(WootsUp.TAG, "no active network");
        return;
    }
}

当我关闭同步时,isAvailable()isConnect()都不会返回false。

NetworkInfo中是否有不同的方法我应该查询,看看是否禁用了后台数据?仅供参考我使用警报驱动的服务,而不是使用SyncAdapter API,如果这有所不同。

谢谢,

罗布

1 个答案:

答案 0 :(得分:0)

“背景数据”设置已在ICS中移动。它与“同步”设置分开。

您可以在设置 - >下找到'背景数据'设置。数据使用 - >菜单按钮 - >限制背景数据。

getActiveNetworkInfo()确实尊重此设置。

另见https://android.stackexchange.com/a/17456