如何尊重Android中的网络使用设置

dav*_*e.c 11 android

我的应用程序执行一些背景数据收集,我正在添加对用户网络首选项的支持,例如执行后台更新和数据漫游.我已经有以下检查:

ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if(cm.getBackgroundDataSetting()) {
...
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
if (networkInfo != null && networkInfo.isAvailable() && networkInfo.isConnected()) {
Run Code Online (Sandbox Code Playgroud)

使用清单中的必填项:

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
Run Code Online (Sandbox Code Playgroud)

这一切看起来都很好,但我想知道我是否应该检查其他任何东西?我担心检查数据漫游,但是文档声明networkInfo.isAvailable()为我检查这个.那么我需要为网络设置实施任何其他检查吗?我应该注意这个领域还有什么吗?

lev*_*501 6

用户可以在后台应用程序运行时更改设置.API建议您收听广播消息:

ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED 
Run Code Online (Sandbox Code Playgroud)

也许你在发送数据之前检查cm.getBackgroundDataSetting(),我怀疑这就足够了.但是,收听广播消息可让您在更改设置时恢复发送背景数据.

我相信在发送数据之前收听广播消息或检查设置就足够了. Android文档推荐前者.


ina*_*ruk 6

除了您的检查,我还检查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
   }      
}
Run Code Online (Sandbox Code Playgroud)

我的应用程序使用了大量数据,因此我不允许在非3G移动网络上下载数据.