Как соблюдать настройки использования сети в Android - PullRequest
11 голосов
/ 08 января 2011

Мое приложение выполняет сбор данных в фоновом режиме, и я добавляю поддержку пользовательских настроек сети, таких как выполнение фоновых обновлений и роуминг данных.У меня уже есть следующие проверки:

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>

Все это работает нормально, но мне было интересно, стоит ли мне проверятьчто-нибудь еще?Я беспокоился о проверке роуминга данных, но docs заявляет, что networkInfo.isAvailable() проверяет это для меня.Так есть ли какие-либо другие проверки, которые мне нужно осуществить для настройки сети?Что-нибудь еще в этой области, о котором я должен знать?

Ответы [ 3 ]

6 голосов
/ 26 января 2011

В дополнение к вашим проверкам я также проверяю состояние роуминга для сети 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.

6 голосов
/ 24 января 2011

Пользователь может изменять настройки во время работы фонового приложения.API рекомендует прослушивать широковещательное сообщение:

ConnectivityManager.ACTION_BACKGROUND_DATA_SETTING_CHANGED 

Возможно, вы проверяете cm.getBackgroundDataSetting () до отправки данных, и я подозреваю, что этого будет достаточно.Однако прослушивание широковещательного сообщения позволит вам возобновить отправку фоновых данных при изменении настроек.

Я считаю, что либо прослушивания широковещательного сообщения, либо проверки настроек перед отправкой данных будет достаточно. Документы для Android рекомендует первое.

2 голосов
/ 27 января 2011

Как и @inazaruk, я также пытаюсь предотвратить (для пользователя, возможно, дорого) передачу по сети при роуминге или загрузке изображений только на GPRS. Поэтому в Zwitscher я реализовал NetworkHelper, который проверяет предпочтения пользователей в отношении роуминга и минимального состояния сети; https://github.com/pilhuhn/ZwitscherA/blob/master/src/de/bsd/zwitscher/helper/NetworkHelper.java Соответствующие настройки здесь: https://github.com/pilhuhn/ZwitscherA/blob/master/res/xml/preferences.xml#L30

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...