问题
I need to know whether 3G connectivity is permitted on the device or not. I don't want to know what current network state is, because if you set "Network Mode" setting in "Mobile network settings" screen to "Automatic" network state could be either 2G or 3G. I just want to know which setting is selected there - 2G, 3G or Automatic (latter two mean the same for me).
Both telephonyManager.getNetworkType()
and ConnectivityManage.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState()
are returning current network state, which can lead me in a wrong direction, because if current state is 2G it could mean that 3G is disabled or just that 3G mode is unavailable at the specific location.
回答1:
Updated after test on LG GT540 phone:
You can use Settings.Secure
to read preferred network mode, as in this code:
ContentResolver cr = getContentResolver();
int value = Secure.getInt(cr, "preferred_network_mode");
On my LG GT540 with CM 7.1 firmware, I have four options:
- GSM/WCDM (auto) - the code above returns 3
- WCDMA only - the code above returns 2
- GSM only - the code above returns 1
- GMS/WCDMA (WCMDA preferred) - the code above returns 0
Naturally, GSM is 2G and WCDMA is 3G. Note that this does not provide you with information on which connection is currently active (provided you allow both). For that, see @VikashKLumar's answer.
回答2:
you can check the 3G by using
boolean is3G3 = (telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_HSUPA);
boolean is3G2 = (telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_HSPA);
boolean is3G = (telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_HSDPA);
These networks are 3G networks.
回答3:
Just dial ×#×#4636#×#× go into phone information and see down if there is GSM only your phone would not support 3G and if It's WCDMA prefferd your phone can use 3G
回答4:
/**
* Checks if we have a valid Internet Connection on the device.
* @param ctx
* @return True if device has internet
*
* Code from: http://www.androidsnippets.org/snippets/131/
*/
public static boolean haveInternet(Context ctx) {
NetworkInfo info = (NetworkInfo) ((ConnectivityManager) ctx
.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
if (info == null || !info.isConnected()) {
return false;
}
if (info.isRoaming()) {
// here is the roaming option you can change it if you want to
// disable internet while roaming, just return false
return false;
}
return true;
}
You also need
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
in AndroidMainfest.xml
来源:https://stackoverflow.com/questions/13743477/android-how-to-check-whether-3g-is-enabled-or-not