2

我需要知道设备上是否允许 3G 连接。我不想知道当前的网络状态是什么,因为如果您将“移动网络设置”屏幕中的“网络模式”设置为“自动”,网络状态可能是 2G 或 3G。我只想知道那里选择了哪个设置 - 2G、3G 或自动(后两个对我来说意味着相同)。

两者telephonyManager.getNetworkType()ConnectivityManage.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState()

正在返回当前网络状态,这可能会将我引向错误的方向,因为如果当前状态为 2G,则可能意味着 3G 已禁用或仅在特定位置不可用 3G 模式。

4

4 回答 4

3

在 LG GT540 手机上测试后更新:

您可以使用Settings.Secure读取首选网络模式,如以下代码所示:

ContentResolver cr = getContentResolver();
int value = Secure.getInt(cr, "preferred_network_mode");

在我的带有 CM 7.1 固件的 LG GT540 上,我有四个选项:

  • GSM/WCDM(自动)- 上面的代码返回3
  • 仅限 WCDMA - 上面的代码返回2
  • 仅限 GSM - 上面的代码返回1
  • GMS/WCDMA(首选 WCMDA)- 上面的代码返回0

当然,GSM是2G,WCDMA是3G。请注意,这不会为您提供有关当前处于活动状态的连接的信息(前提是您都允许)。为此,请参阅@VikashKLumar 的回答。

于 2012-12-06T12:56:43.133 回答
1

您可以使用检查 3G

boolean is3G3 = (telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_HSUPA);
boolean is3G2 = (telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_HSPA);
boolean is3G = (telephonyManager.getNetworkType() == TelephonyManager.NETWORK_TYPE_HSDPA);

这些网络是 3G 网络。

于 2012-12-06T12:26:56.337 回答
0

直接拨×#×#4636#×#×进入手机信息看看有没有GSM只有你的手机不支持3G,如果是WCDMA的话你的手机可以使用3G

于 2014-02-17T08:48:29.193 回答
-1
/**
 * 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
于 2012-12-06T12:22:44.113 回答