Получить тип сети - PullRequest
       26

Получить тип сети

8 голосов
/ 27 мая 2010

Я пытался получить текущий тип сети, но безуспешно

когда я говорю тип сети: я имею в виду знать эту информацию: если тип: NETWORK_TYPE_IDEN или NETWORK_TYPE_UMTS .. и т. д.

я пытался использовать:

NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();

или

NetworkInfo mobNetInfo = connectivityManager.getNetworkInfo 
            (ConnectivityManager.TYPE_MOBILE); 

но безуспешно ..

Я делаю это, потому что я хочу знать, является ли текущая сеть IDEN или текущая сеть подключена через Wi-Fi ..

Ответы [ 11 ]

16 голосов
/ 14 ноября 2013

Я ненавижу магические числа:

<code>/**
 * You need to add:
 * 
 * <pre>
 *     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 * 
* * в вашем AndroidManifest.xml. * / private String networkType () { TelephonyManager teleMan = (TelephonyManager) getSystemService (Context.TELEPHONY_SERVICE); int networkType = teleMan.getNetworkType (); switch (networkType) { case TelephonyManager.NETWORK_TYPE_1xRTT: вернуть «1xRTT»; case TelephonyManager.NETWORK_TYPE_CDMA: вернуть "CDMA"; case TelephonyManager.NETWORK_TYPE_EDGE: вернуть «EDGE»; case TelephonyManager.NETWORK_TYPE_EHRPD: вернуть "eHRPD"; case TelephonyManager.NETWORK_TYPE_EVDO_0: вернуть "EVDO rev. 0"; case TelephonyManager.NETWORK_TYPE_EVDO_A: вернуть "EVDO rev. A"; case TelephonyManager.NETWORK_TYPE_EVDO_B: вернуть "EVDO rev. B"; case TelephonyManager.NETWORK_TYPE_GPRS: вернуть «GPRS»; case TelephonyManager.NETWORK_TYPE_HSDPA: вернуть «HSDPA»; case TelephonyManager.NETWORK_TYPE_HSPA: вернуть «HSPA»; case TelephonyManager.NETWORK_TYPE_HSPAP: вернуть "HSPA +"; case TelephonyManager.NETWORK_TYPE_HSUPA: вернуть «HSUPA»; case TelephonyManager.NETWORK_TYPE_IDEN: вернуть «iDen»; case TelephonyManager.NETWORK_TYPE_LTE: вернуть «LTE»; case TelephonyManager.NETWORK_TYPE_UMTS: вернуть «UMTS»; case TelephonyManager.NETWORK_TYPE_UNKNOWN: вернуть «Неизвестно»; } бросить новое RuntimeException («Новый тип сети»); }
15 голосов
/ 22 июля 2011

Это работает для меня, чтобы проверить тип сети ...

TelephonyManager teleMan =  
            (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
int networkType = teleMan.getNetworkType();

switch (networkType)
{
case 7:
    textV1.setText("1xRTT");
    break;      
case 4:
    textV1.setText("CDMA");
    break;      
case 2:
    textV1.setText("EDGE");
    break;  
case 14:
    textV1.setText("eHRPD");
    break;      
case 5:
    textV1.setText("EVDO rev. 0");
    break;  
case 6:
    textV1.setText("EVDO rev. A");
    break;  
case 12:
    textV1.setText("EVDO rev. B");
    break;  
case 1:
    textV1.setText("GPRS");
    break;      
case 8:
    textV1.setText("HSDPA");
    break;      
case 10:
    textV1.setText("HSPA");
    break;          
case 15:
    textV1.setText("HSPA+");
    break;          
case 9:
    textV1.setText("HSUPA");
    break;          
case 11:
    textV1.setText("iDen");
    break;
case 13:
    textV1.setText("LTE");
    break;
case 3:
    textV1.setText("UMTS");
    break;          
case 0:
    textV1.setText("Unknown");
    break;
}
14 голосов
/ 27 мая 2010

Чтобы узнать тип сети (я думаю, вы говорите о Wi-Fi или мобильном телефоне), вы можете использовать этот фрагмент кода:

ConnectivityManager conMan = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

//mobile
State mobile = conMan.getNetworkInfo(0).getState();

//wifi
State wifi = conMan.getNetworkInfo(1).getState();

, а затем используйте его так:

if (mobile == NetworkInfo.State.CONNECTED || mobile == NetworkInfo.State.CONNECTING) {
    //mobile
} else if (wifi == NetworkInfo.State.CONNECTED || wifi == NetworkInfo.State.CONNECTING) {
    //wifi
}

Чтобы узнать тип мобильной сети, я бы попробовал TelephonyManager # getNetworkType или NetworkInfo # getSubtypeName

7 голосов
/ 05 августа 2011

Я использую эту функцию:

public String get_network()
       {Activity act=(Activity)context;
        String network_type="UNKNOWN";//maybe usb reverse tethering
        NetworkInfo active_network=((ConnectivityManager)act.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
        if (active_network!=null && active_network.isConnectedOrConnecting())
           {if (active_network.getType()==ConnectivityManager.TYPE_WIFI)
               {network_type="WIFI";
               }
            else if (active_network.getType()==ConnectivityManager.TYPE_MOBILE)
                 {network_type=((ConnectivityManager)act.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo().getSubtypeName();
                 }
           }
        return network_type;
       }
2 голосов
/ 06 марта 2016
/** Network type is unknown */
public static final int NETWORK_TYPE_UNKNOWN = 0;
/** Current network is GPRS */
public static final int NETWORK_TYPE_GPRS = 1;
/** Current network is EDGE */
public static final int NETWORK_TYPE_EDGE = 2;
/** Current network is UMTS */
public static final int NETWORK_TYPE_UMTS = 3;
/** Current network is CDMA: Either IS95A or IS95B*/
public static final int NETWORK_TYPE_CDMA = 4;
/** Current network is EVDO revision 0*/
public static final int NETWORK_TYPE_EVDO_0 = 5;
/** Current network is EVDO revision A*/
public static final int NETWORK_TYPE_EVDO_A = 6;
/** Current network is 1xRTT*/
public static final int NETWORK_TYPE_1xRTT = 7;
/** Current network is HSDPA */
public static final int NETWORK_TYPE_HSDPA = 8;
/** Current network is HSUPA */
public static final int NETWORK_TYPE_HSUPA = 9;
/** Current network is HSPA */
public static final int NETWORK_TYPE_HSPA = 10;
/** Current network is iDen */
public static final int NETWORK_TYPE_IDEN = 11;
/** Current network is EVDO revision B*/
public static final int NETWORK_TYPE_EVDO_B = 12;
/** Current network is LTE */
public static final int NETWORK_TYPE_LTE = 13;
/** Current network is eHRPD */
public static final int NETWORK_TYPE_EHRPD = 14;
/** Current network is HSPA+ */
public static final int NETWORK_TYPE_HSPAP = 15;
/** Current network is GSM {@hide} */
public static final int NETWORK_TYPE_GSM = 16;
 /** Current network is TD_SCDMA {@hide} */
public static final int NETWORK_TYPE_TD_SCDMA = 17;
/** Current network is IWLAN {@hide} */
public static final int NETWORK_TYPE_IWLAN = 18;

Список предоставленных сетевых типов.

2 голосов
/ 17 ноября 2015

Лучший ответ

public static String getNetworkType(Context context) {

            TelephonyManager teleMan = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
            int networkType = teleMan.getNetworkType();
            switch ( networkType ) {
                case TelephonyManager.NETWORK_TYPE_1xRTT:
                    return "1xRTT";
                case TelephonyManager.NETWORK_TYPE_CDMA:
                    return "CDMA";
                case TelephonyManager.NETWORK_TYPE_EDGE:
                    return "EDGE";
                case TelephonyManager.NETWORK_TYPE_EHRPD:
                    return "eHRPD";
                case TelephonyManager.NETWORK_TYPE_EVDO_0:
                    return "EVDO rev. 0";
                case TelephonyManager.NETWORK_TYPE_EVDO_A:
                    return "EVDO rev. A";
                case TelephonyManager.NETWORK_TYPE_EVDO_B:
                    return "EVDO rev. B";
                case TelephonyManager.NETWORK_TYPE_GPRS:
                    return "GPRS";
                case TelephonyManager.NETWORK_TYPE_HSDPA:
                    return "HSDPA";
                case TelephonyManager.NETWORK_TYPE_HSPA:
                    return "HSPA";
                case TelephonyManager.NETWORK_TYPE_HSPAP:
                    return "HSPA+";
                case TelephonyManager.NETWORK_TYPE_HSUPA:
                    return "HSUPA";
                case TelephonyManager.NETWORK_TYPE_IDEN:
                    return "iDen";
                case TelephonyManager.NETWORK_TYPE_LTE:
                    return "LTE";
                case TelephonyManager.NETWORK_TYPE_UMTS:
                    return "UMTS";
                case TelephonyManager.NETWORK_TYPE_UNKNOWN:
                    return "Unknown";
            }
            return "New type of network";
    }
1 голос
/ 17 марта 2012

Кроме того, добавьте ниже требуемые разрешения в свой AndroidManifest.xml.

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

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

0 голосов
/ 22 ноября 2018

Если вы хотите знать, какой это тип сети, вы можете использовать это:

private String getNetworkClass() {
    // network type
    TelephonyManager mTelephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
    int networkType = mTelephonyManager != null ? mTelephonyManager.getNetworkType() : 0;
    switch (networkType) {
        case TelephonyManager.NETWORK_TYPE_UNKNOWN:
            return "Unknown network";
        case TelephonyManager.NETWORK_TYPE_GSM:
            return " GSM";
        case TelephonyManager.NETWORK_TYPE_CDMA:
        case TelephonyManager.NETWORK_TYPE_1xRTT:
        case TelephonyManager.NETWORK_TYPE_IDEN:
            return " 2G";
        case TelephonyManager.NETWORK_TYPE_GPRS:
            return " GPRS (2.5G)";
        case TelephonyManager.NETWORK_TYPE_EDGE:
            return " EDGE (2.75G)";
        case TelephonyManager.NETWORK_TYPE_UMTS:
        case TelephonyManager.NETWORK_TYPE_EVDO_0:
        case TelephonyManager.NETWORK_TYPE_EVDO_A:
        case TelephonyManager.NETWORK_TYPE_EVDO_B:
            return " 3G";
        case TelephonyManager.NETWORK_TYPE_HSPA:
        case TelephonyManager.NETWORK_TYPE_HSDPA:
        case TelephonyManager.NETWORK_TYPE_HSUPA:
            return " H (3G+)";
        case TelephonyManager.NETWORK_TYPE_EHRPD:
        case TelephonyManager.NETWORK_TYPE_HSPAP:
        case TelephonyManager.NETWORK_TYPE_TD_SCDMA:
            return " H+ (3G++)";
        case TelephonyManager.NETWORK_TYPE_LTE:
        case TelephonyManager.NETWORK_TYPE_IWLAN:
            return " 4G";
        default:
            return " 4G+";
    }
}
0 голосов
/ 01 ноября 2018

// ** Возвращаемый тип подключения к сети

public static int getNetworkType(Context context) {
        if (!isNetworkConnected(context))
            return -1;
        ConnectivityManager conMan = (ConnectivityManager) context.
                getSystemService(Context.CONNECTIVITY_SERVICE);

        //mobile
        State mobile = conMan.getNetworkInfo(0).getState();
        //wifi
        State wifi = conMan.getNetworkInfo(1).getState();

        int result = 0;

        if (mobile == State.CONNECTED || mobile == State.CONNECTING) {
            result |= NETWORK_MOBILE;
        }

        if (wifi == State.CONNECTED || wifi == State.CONNECTING) {
            result |= NETWORK_WIFI;
        }

        return result;
    }
0 голосов
/ 01 сентября 2017

Лучшее использование будет:

    NetworkInfo activeNetworkInfo = ((ConnectivityManager) activity.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
    if (activeNetworkInfo == null) return false;
    switch (activeNetworkInfo.getType()) {
        case ConnectivityManager.TYPE_WIFI:
            return true;
    }
//        public static final int TYPE_BLUETOOTH = 7;
//        public static final int TYPE_DUMMY = 8;
//        public static final int TYPE_ETHERNET = 9;
//        public static final int TYPE_MOBILE = 0;
//        public static final int TYPE_MOBILE_DUN = 4;
//        /** @deprecated */
//        @Deprecated
//        public static final int TYPE_MOBILE_HIPRI = 5;
//        /** @deprecated */
//        @Deprecated
//        public static final int TYPE_MOBILE_MMS = 2;
//        /** @deprecated */
//        @Deprecated
//        public static final int TYPE_MOBILE_SUPL = 3;
//        public static final int TYPE_VPN = 17;
//        public static final int TYPE_WIFI = 1;
//        public static final int TYPE_WIMAX = 6;

Какие другие типы вы хотите определить и обработать, зависит от вас ...

Для тех, кому нужен строковый идентификатор, лучше использовать:

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