반응형
// http://opensource.org/licenses/MIT | |
package net.i2p.android.router.util; | |
import android.content.Context; | |
import android.net.ConnectivityManager; | |
import android.net.NetworkInfo; | |
import android.telephony.TelephonyManager; | |
/** | |
* Check device's network connectivity and speed. | |
* | |
* @author emil http://stackoverflow.com/users/220710/emil | |
* @author str4d | |
*/ | |
public class Connectivity { | |
/** | |
* Get the network info. | |
* | |
* @param context the Context. | |
* @return the active NetworkInfo. | |
*/ | |
public static NetworkInfo getNetworkInfo(Context context) { | |
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); | |
return cm.getActiveNetworkInfo(); | |
} | |
/** | |
* Check if there is any connectivity at all. | |
* | |
* @param context the Context. | |
* @return true if we are connected to a network, false otherwise. | |
*/ | |
public static boolean isConnected(Context context) { | |
NetworkInfo info = Connectivity.getNetworkInfo(context); | |
// Works on emulator and devices. | |
// Note the use of isAvailable() - without this, isConnected() can | |
// return true when Wifi is disabled. | |
// http://stackoverflow.com/a/2937915 | |
return (info != null && info.isAvailable() && info.isConnected()); | |
} | |
/** | |
* Check if there is any connectivity to a Wifi network. | |
* | |
* @param context the Context. | |
* @return true if we are connected to a Wifi network, false otherwise. | |
*/ | |
public static boolean isConnectedWifi(Context context) { | |
NetworkInfo info = Connectivity.getNetworkInfo(context); | |
return (info != null && info.isAvailable() && info.isConnected() && | |
info.getType() == ConnectivityManager.TYPE_WIFI); | |
} | |
/** | |
* Check if there is any connectivity to a mobile network. | |
* | |
* @param context the Context. | |
* @return true if we are connected to a mobile network, false otherwise. | |
*/ | |
public static boolean isConnectedMobile(Context context) { | |
NetworkInfo info = Connectivity.getNetworkInfo(context); | |
return (info != null && info.isAvailable() && info.isConnected() && | |
info.getType() == ConnectivityManager.TYPE_MOBILE); | |
} | |
/** | |
* Check if there is fast connectivity. | |
* | |
* @param context the Context. | |
* @return true if we have "fast" connectivity, false otherwise. | |
*/ | |
public static boolean isConnectedFast(Context context) { | |
NetworkInfo info = Connectivity.getNetworkInfo(context); | |
return (info != null && info.isAvailable() && info.isConnected() && | |
Connectivity.isConnectionFast(info.getType(), info.getSubtype())); | |
} | |
/** | |
* Check if the connection is fast. | |
* | |
* @param type the network type. | |
* @param subType the network subtype. | |
* @return true if the provided type/subtype combination is classified as fast. | |
*/ | |
public static boolean isConnectionFast(int type, int subType) { | |
if (type == ConnectivityManager.TYPE_WIFI) { | |
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_EVDO_0: | |
return true; // ~ 400-1000 kbps | |
case TelephonyManager.NETWORK_TYPE_EVDO_A: | |
return true; // ~ 600-1400 kbps | |
case TelephonyManager.NETWORK_TYPE_GPRS: | |
return false; // ~ 100 kbps | |
case TelephonyManager.NETWORK_TYPE_HSDPA: | |
return true; // ~ 2-14 Mbps | |
case TelephonyManager.NETWORK_TYPE_HSPA: | |
return true; // ~ 700-1700 kbps | |
case TelephonyManager.NETWORK_TYPE_HSUPA: | |
return true; // ~ 1-23 Mbps | |
case TelephonyManager.NETWORK_TYPE_UMTS: | |
return true; // ~ 400-7000 kbps | |
/* | |
* Above API level 7, make sure to set android:targetSdkVersion | |
* to appropriate level to use these | |
*/ | |
case TelephonyManager.NETWORK_TYPE_EHRPD: // API level 11 | |
return true; // ~ 1-2 Mbps | |
case TelephonyManager.NETWORK_TYPE_EVDO_B: // API level 9 | |
return true; // ~ 5 Mbps | |
case TelephonyManager.NETWORK_TYPE_HSPAP: // API level 13 | |
return true; // ~ 10-20 Mbps | |
case TelephonyManager.NETWORK_TYPE_IDEN: // API level 8 | |
return false; // ~25 kbps | |
case TelephonyManager.NETWORK_TYPE_LTE: // API level 11 | |
return true; // ~ 10+ Mbps | |
// Unknown | |
case TelephonyManager.NETWORK_TYPE_UNKNOWN: | |
default: | |
return false; | |
} | |
} else { | |
return false; | |
} | |
} | |
} |
사용법 연구중
구현 방법 아시는 분 있으면 부탁 드립니다.
getcontext 에서 계속 에러가 나네요
반응형
'IT > android' 카테고리의 다른 글
당장 플레이스토어에 올리면 돈되는 로또앱. (0) | 2022.03.31 |
---|---|
안드로이드 화면 회전 및 로딩 흰색 화면 방지 (0) | 2017.10.15 |
DELETE_FAILED_INTERNAL_ERROR (0) | 2017.10.14 |
안드로이드 스튜디오 화면 고정 (0) | 2017.10.09 |
navi bar image src (0) | 2017.09.07 |