我的应用程序执行一些背景数据收集,我正在添加对用户网络首选项的支持,例如执行后台更新和数据漫游。我已经有以下检查:
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if(cm.getBackgroundDataSetting()) {
...
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable() && networkInfo.isConnected()) {
清单中包含所需的条目:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
这一切似乎都很好,但我想知道我是否应该检查其他什么?我担心检查数据漫游但是 文档 说明 networkInfo.isAvailable()
检查这个给我。那么我需要为网络设置实施任何其他检查吗?我应该注意这个领域还有什么吗?
用户可以在后台应用程序运行时更改设置。 API建议您收听广播消息:
ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED
也许你在发送数据之前检查cm.getBackgroundDataSetting(),我怀疑这就足够了。但是,收听广播消息将允许您在更改设置时继续发送背景数据。
我相信在发送数据之前收听广播消息或检查设置就足够了。 Android文档 推荐前者。
除了您的检查,我还检查3g网络的漫游状态:
NetworkInfo info = m_connectivityManager.getActiveNetworkInfo();
int netType = info.getType();
int netSubtype = info.getSubtype();
if (netType == ConnectivityManager.TYPE_WIFI || netType == ConnectivityManager.TYPE_WIMAX)
{
//no restrictions, do some networking
}
else if (netType == ConnectivityManager.TYPE_MOBILE &&
netSubtype == TelephonyManager.NETWORK_TYPE_UMTS)
{
//3G connection
if(!m_telephonyManager.isNetworkRoaming())
{
//do some networking
}
}
我的应用程序使用大量数据,因此我不允许在非3G移动网络上下载数据。