My app performs some backgound data collection and I\'m adding support for the user network preferences, such as performing background updates and data roaming. I have the
Additionally to your checks I also do check for roaming state for 3g network:
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
}
}
My application uses a lot of data, so I do not allow data downloading on non-3g mobile networks.
The user may change the settings while your background app is running. The API recommends that you listen to the broadcast message:
ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED
Perhaps you are checking cm.getBackgroundDataSetting() prior to sending data, and I suspect this would be sufficient. However, listening to the broadcast message will let you resume sending background data when the settings are changed.
I believe that either listening to the broadcast message or checking the settings before sending data will suffice. Android docs recommends the former.
Like @inazaruk, I a also trying to prevent (for the user possibly expensive) network transfers when roaming or downloading images while on GPRS only. Therefore in Zwitscher I've implemented a NetworkHelper that checks against users preferences on romaing and minimal network state; https://github.com/pilhuhn/ZwitscherA/blob/master/src/de/bsd/zwitscher/helper/NetworkHelper.java The matching preferences are here: https://github.com/pilhuhn/ZwitscherA/blob/master/res/xml/preferences.xml#L30