0

Я ищу, чтобы регистрировать количество сеансов пакетных данных, которые телефон Android на 3G или 2G имеет в заданный период времени.Как обнаружить конец сеанса мобильной передачи данных на телефонах Android

Я надеялся, что TelephonyManager.DATA_DISCONNECTED события в PhoneStateListeners соответствует концу Sesion данных, но это не делает, так как мой оператор берет меня за сеанс (всплывающего сообщения, которое приходит после того, как данные использование) после нескольких событий DATA_DISCONNECTED.

ответ

0

Для прослушивания события отключения данных или передачи данных вам необходимо использовать BroadcastReceiver. Сначала вам нужно добавить ресивер в AndroidManifest.xml.

<receiver 
     android:name=".Networkconncted" 
     android:enabled="true"> 
     <intent-filter> 
      <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> 
     </intent-filter> 
    </receiver> 

Далее вам нужно создать класс, который расширяет BroadcastReceiver, этот класс будет называться, когда данные подключен/отключен.

public class Networkconncted extends BroadcastReceiver { 
    public static final String key = "networkInfo"; 
    public static final String disconnected = "DISCONNECTED"; 
    public static final String MOB_INT = "mobile"; 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     Bundle extras = intent.getExtras(); 
     if (extras != null) { 
      String value = extras.get(key).toString(); 
      Log.v("netappcheck", value); 
      String temp[] = value.split(","); 
      if (temp[0].toLowerCase().contains(MOB_INT)) //check if mobile n/w 
       if (temp[1].contains(disconnected)) { 
        Toast.makeText(context,"data disconnected",Toast.LENGTH_SHORT).show(); 
        //do something when data is disconnected 
       } else { 
        Toast.makeText(context,"data connected",Toast.LENGTH_SHORT).show(); 
        //do something when data is connected 
       } 
     } 
    } 
} 

Когда BroadcastReceiver называется intent.getExtras().get(key) возвратит ниже значение:

[type: MOBILE[EDGE], state: DISCONNECTED/DISCONNECTED, 
reason: (unspecified), extra: airtelgprs.com, roaming: false, 
failover: false, isAvailable: true, isConnectedToProvisioningNetwork: false] 

Поле в типе упоминает тип сети подключается, при подключении/disconected типа Wi-Fi будет возвращать WIFI[], когда подключенный к мобильной сети (3G, EDGE и т. д.), поле типа вернет MOBILE[].

В поле state указано состояние соединения.

Переменная температура [] помещает тип в 0-ю позицию, состояние в 1-ом положении. Нам нужно проверить, находится ли его MOBILE в 0-й позиции, поскольку нам нужно только отслеживать подключение к мобильной сети. Затем проверьте состояние в 1-й позиции.

Я тестировал его в Android 5.0.1 и Android 4.0.4, он отлично работает. Дополнительная информация here

+0

Чувак, я ценю ваш ответ, но похоже, что вы не прошли этот вопрос, прежде чем отвечать на него. –

+0

Итак, в чем именно заключается ваш вопрос? Вы хотите, чтобы подсчет или количество сеансов передачи данных соединялись/разъединялись. Вы хотите уточнить вопрос больше – Psypher

+0

Чувак, разъединение данных не совпадает с отключением сеанса, я не хочу идти в инженерную часть, но если вы останетесь в Индии, попробуйте использовать код ура и посмотрите, сколько раз вы получаете данные отключите событие, прежде чем вы получите всплывающее сообщение от оператора ur, указывающее конец сеанса передачи данных. Я проверил его, не раз. –

Смежные вопросы