Ich habe eine Anzeige in meiner Anwendung, um den Netzwerktyp (2G oder 3G oder 4G) anzuzeigen. Woher weiß ich nach Erhalt des Netzwerktyps, in welcher Geschwindigkeitskategorie er sich befinden soll?
Ich weiß, wie man den Netzwerktyp erkennt:
private TelephonyManager telephonyManager;
telephonyManager = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
CurrentNetworkType = telephonyManager.getNetworkType();
Angesichts der möglichen Rückgabewerte:
// public static final int NETWORK_TYPE_1xRTT
// Since: API Level 4
// Current network is 1xRTT
// Constant Value: 7 (0x00000007)
//
// public static final int NETWORK_TYPE_CDMA
// Since: API Level 4
// Current network is CDMA: Either IS95A or IS95B
// Constant Value: 4 (0x00000004)
//
// public static final int NETWORK_TYPE_EDGE
// Since: API Level 1
// Current network is EDGE
// Constant Value: 2 (0x00000002)
//
// public static final int NETWORK_TYPE_EHRPD
// Since: API Level 11
// Current network is eHRPD
// Constant Value: 14 (0x0000000e)
//
// public static final int NETWORK_TYPE_EVDO_0
// Since: API Level 4
// Current network is EVDO revision 0
// Constant Value: 5 (0x00000005)
//
// public static final int NETWORK_TYPE_EVDO_A
// Since: API Level 4
// Current network is EVDO revision A
// Constant Value: 6 (0x00000006)
//
// public static final int NETWORK_TYPE_EVDO_B
// Since: API Level 9
// Current network is EVDO revision B
// Constant Value: 12 (0x0000000c)
//
// public static final int NETWORK_TYPE_GPRS
// Since: API Level 1
// Current network is GPRS
// Constant Value: 1 (0x00000001)
//
// public static final int NETWORK_TYPE_HSDPA
// Since: API Level 5
// Current network is HSDPA
// Constant Value: 8 (0x00000008)
//
// public static final int NETWORK_TYPE_HSPA
// Since: API Level 5
// Current network is HSPA
// Constant Value: 10 (0x0000000a)
//
// public static final int NETWORK_TYPE_HSPAP
// Since: API Level 13
// Current network is HSPA+
// Constant Value: 15 (0x0000000f)
//
// public static final int NETWORK_TYPE_HSUPA
// Since: API Level 5
// Current network is HSUPA
// Constant Value: 9 (0x00000009)
//
// public static final int NETWORK_TYPE_IDEN
// Since: API Level 8
// Current network is iDen
// Constant Value: 11 (0x0000000b)
//
// public static final int NETWORK_TYPE_LTE
// Since: API Level 11
// Current network is LTE
// Constant Value: 13 (0x0000000d)
//
// public static final int NETWORK_TYPE_UMTS
// Since: API Level 1
// Current network is UMTS
// Constant Value: 3 (0x00000003)
//
// public static final int NETWORK_TYPE_UNKNOWN
// Since: API Level 1
// Network type is unknown
// Constant Value: 0 (0x00000000)
Ich würde LTE als 4G betrachten, aber welche davon werden wirklich als 3G angesehen? Alles andere würde ich als 2G betrachten.
Wo ziehen Sie die Grenze zwischen 3G oder nicht 3G?
Update: Ich habe eine weitere relevante Antwort unter https://stackoverflow.com/a/8548926/949577 gefunden Es verwendet ConnectivityManager (), um Typ und Subtyp abzurufen, und klassifiziert den Subtyp dann als schnell oder nicht. Ich weiß nicht, ob die Verwendung von ConnectivityManager () ein besserer Ansatz ist als die Verwendung von TelephonyManager (), da beide den Netzwerktyp zurückgeben können.
Außerdem habe ich unter http://en.wikipedia.org/wiki/Comparison_of_wireless_data_standards einen Link gefunden, der die Standards für drahtlose Daten vergleicht .