Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
InessaSuper
97 / 4 / 0
Регистрация: 09.05.2015
Сообщений: 70
1

Проверка скорости сетевого подключения

17.08.2017, 06:51. Просмотров 378. Ответов 2
Метки нет (Все метки)

Мне необходимо осуществлять в своём приложении проверку скорости сетевого подключения.

Мною было принято решение разделять скорость подключения на быструю (высокую) и медленную (низкую).

Медленная скорость подключения предполагает собой скорость сетевого подключения меньше 100 kbps.

Все остальные скорости сетевого подключения больше этого значения считаются условно высокими (быстрыми) скоростями подключения.

Под заданный критерий для медленных скоростей подходят все скорости сетевых подключений, осуществляемых в 2G-сетях.

Я использую код, приведенный ниже для осуществления проверки скорости текущего используемого сетевого подключения на Android-устройстве.

В связи с тонкостями данной реализации у меня возникло несколько вопросов.

1. В каких случаях может возникать возможность того, что будет возвращаться значение TelephonyManager.NETWORK_TYPE_UNKNOWN?

2. Что это может означать и как обрабатывать эту ситуацию?

3. Что представляют собой такие типы возвращаемых значений для соединения как

- ConnectivityManager.TYPE_MOBILE_DUN,
- ConnectivityManager.TYPE_MOBILE_HIPRI,
- ConnectivityManager.TYPE_MOBILE_MMS,
- ConnectivityManager.TYPE_MOBILE_SUPL?

4. В каких случаях могут возвращаться эти значения на устройствах?

5. В реализованном алгоритме проверки скорости сетевого подключения для этих значений мною возвращается значение низкой (медленной) скорости подключения без дальнейшей проверки используют ли эти сетевые подключения сеть 2G или нет.

Насколько это правильно?

6. Насколько часто вообще устройства могут находится в режиме использования этих типов сетевых подключений?

7. В каких случаях может возникать ситуация, что метод isConnected() может возвращать true, а метод hasInternetAccess() будет возвращать false?

8. Какие рекомендации выдавать пользователю в таком случае для исправления сложившейся ситуации?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
package com.connectivitymanager;
 
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.telephony.TelephonyManager;
 
/**
 * Check device's network connectivity and speed 
 */
 
public class Connectivity {
 
    /**
     * Get the network info
     * @param context
     * @return
     */
    public static NetworkInfo getNetworkInfo(Context context){
        
        ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
        return cm.getActiveNetworkInfo();
    }
    
    /**
     * Check if there is any connectivity
     * @param context
     * @return
     */
    public static boolean isConnected(Context context){
        
        NetworkInfo info = Connectivity.getNetworkInfo(context);
        return (info != null && info.isConnected());
    }
    
    /**
     * Check if there is internet access
     * @param context
     * @return
     */ 
    public static boolean hasInternetAccess(Context c){
        TelephonyManager tm = (TelephonyManager) c.getSystemService(Context.TELEPHONY_SERVICE);
        if(isConnected(c) && tm.getDataState() == TelephonyManager.DATA_CONNECTED)
           return true;
        else
            return false;
    }
 
    /**
     * Check if there is fast connectivity
     * @param context
     * @return
     */
    public static boolean isConnectedFast(Context context){
        
        NetworkInfo info = Connectivity.getNetworkInfo(context);
        return (info != null && info.isConnected() && Connectivity.isConnectionFast(info.getType(),info.getSubtype()));
    }
    
    /**
     * Check if the connection is fast
     * @param type
     * @param subType
     * @return
     */
    public static boolean isConnectionFast(int type, int subType){
        
        if (type == ConnectivityManager.TYPE_WIFI 
          ||type == ConnectivityManager.TYPE_ETHERNET 
          ||type == ConnectivityManager.TYPE_WIMAX){
            return true;
        }else if(type == ConnectivityManager.TYPE_MOBILE){
            switch(subType){
            case TelephonyManager.NETWORK_TYPE_1xRTT:
                return false; // ~ 50-100 kbps
            case TelephonyManager.NETWORK_TYPE_CDMA:
                return false; // ~ 14-64 kbps
            case TelephonyManager.NETWORK_TYPE_EDGE:
                return false; // ~ 50-100 kbps
            case TelephonyManager.NETWORK_TYPE_GPRS:
                return false; // ~ 100 kbps
            case TelephonyManager.NETWORK_TYPE_IDEN: // API level 8
                return false; // ~25 kbps
            case TelephonyManager.NETWORK_TYPE_UNKNOWN:
                return false;
            default:
                return true;
            }
        }else{
            return false;
        }
    }   
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.08.2017, 06:51
Ответы с готовыми решениями:

Проверка подключения по bluetooth
Не подскажите, как можно проверять активно ли подключение по bluetooth? У меня есть два...

Проверка подключения к интернету. Почему Exception игнорируется?
Подскажите пожалуйста кто знает...отправляю емаил без инета, все равно пишет что сообщение...

Проверка подключения сетевого диска
Здравствуйте, Пытаюсь наваять скрипт бекапирования файлов в 7zip.Так как фаЙлы копируются на...

Проверка стабильности сетевого подключения
Здравствуйте. Имеется сетевое приложение Пока что просто чатик обмен данными происходит только...

Настройка сетевого подключения по умолчанию в rashbian для подключения к сети интернет
Всем здравствуйте! На orange PI zero поднял ОС rashbian с необходимым ПО. Всё работает как надо. ...

2
Pablito
2812 / 2236 / 754
Регистрация: 12.05.2014
Сообщений: 7,821
Завершенные тесты: 1
17.08.2017, 10:32 2
много вопросов для одной темы
на гугле забанили?
0
InessaSuper
97 / 4 / 0
Регистрация: 09.05.2015
Сообщений: 70
17.08.2017, 11:10  [ТС] 3
Гугл помог найти описанное решение.

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

Допустим, что я приняла верные решения.

Хотя мне хотелось бы услышать от кого-нибудь какую-либо критику или подтверждение используемых подходов.

Но вот один вопрос остаётся у меня не разрешённым.

Я обнаружила, что по какой-то причине метод hasInternetAccess() возвращает false, когда на устройстве есть нормальный доступ к сети интернет, и я могу нормально через браузер заходить на любые сайты.

В чём может быть загвоздка в реализации этого простого метода?


Почему (tm.getDataState() == TelephonyManager.DATA_CONNECTED) возвращает false, когда на устройстве ЕСТЬ интернет?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2017, 11:10

Отображение скорости сетевого адаптера
Всем привет У меня на убунте не отображается скорость адаптера, запучена на виртуалке VMware,...

WMI - анализ скорости сетевого адаптера
Приветствую. Суть задачи - необходим скрипт, получающий текущую скорость (режим) сетевого...

Автополучение сетевого адреса на Автосогласовании скорости
Доброго времени, Господа! Есть такая проблема: Настраиваю на WinServer03 SP2 соединение с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru