天道酬勤,学无止境

Android: How to check whether 3G is enabled or not?

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.

评论

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.

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.

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

/**
 * 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

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 检查手机是否正在使用WIFI或数据/ 3G(Check whether mobile is using WIFI or Data/3G)
    问题 假设设备上同时启用了WIFI和数据/ 3G,如何检查用户当前是否正在通过wifi使用互联网或数据计划(假设它们都已启用)。 因此,我不需要检查它们是启用还是禁用,我想检测用户实际使用的是哪个。 我一直在做以下事情,这是唯一的解决方案吗? WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); if (WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState()) == NetworkInfo.DetailedState.CONNECTED) { String ssid = wifiInfo.getSSID(); } 回答1 void chkStatus() { final ConnectivityManager connMgr = (ConnectivityManager) this.getSystemService(Context.CONNECTIVITY_SERVICE); final android.net.NetworkInfo wifi = connMgr.getNetworkInfo
  • Android互联网连接检查问题(Android internet connectivity check problem)
    问题 我是Android开发的新手,正在开发需要将手机通过Wifi,EDGE或3G连接到Internet的Android应用程序。 这是我用来检查互联网连接是否可用的代码 public static boolean isConnected() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); return cm.getActiveNetworkInfo().isConnectedOrConnecting(); } 我还在清单文件中设置了这些权限 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 启用3G时,在运行1.5版Android的仿真器中,此方法工作正常,但当我禁用3G连接时,它崩溃。 当我调用isConnectedOrConnecting()时,我的应用程序将引发空指针异常。 在运行Android 2.1的HTC Desire上也发生了同样的事情。 希望任何人都知道解决方案。 提前致谢! 回答1
  • Activity has leaked window
    In my splash screen, I made it so that it detects whether wifi or 3g is enabled or not. If it is not, a dialog screen prompts the user to exit and turn either one on. If it is on, then the code will continue. I keep getting an error in my logcat about my activity having a leaked window. I am not sure how to solve this issue. Code and logcat below. Any Ideas? Here's my code: //create alert dialog for wifi and 3g connectionDialog = new AlertDialog.Builder(SplashMain.this).create(); Log.d(TAG, "dialog created"); connectionDialog.setTitle("Wifi or 3G not detected. Please enable either Wifi or 3G")
  • Android:检查3G或Wifi网络是否已开启或是否在Android设备上可用(Android : Check 3G or Wifi network is ON or Available or not on android Device)
    问题 如何以编程方式检查网络是否在android设备上可用,当我们尝试与Wifi和3G等网络连接时会引发消息或祝酒词。 回答1 要检查网络(例如3G或WiFi)是否可用,我们可以在开始活动之前使用以下方法进行验证。 ConnectivityManager manager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE); //For 3G check boolean is3g = manager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE) .isConnectedOrConnecting(); //For WiFi Check boolean isWifi = manager.getNetworkInfo(ConnectivityManager.TYPE_WIFI) .isConnectedOrConnecting(); System.out.println(is3g + " net " + isWifi); if (!is3g && !isWifi) { Toast.makeText(getApplicationContext(),"Please make sure your Network Connection is ON ",Toast.LENGTH
  • 如何在Android设备上检查wifi或3g网络(how to check wifi or 3g network is available on android device)
    问题 在这里,我的android设备支持wifi和3g。 在特定时间,该设备上可以使用哪个网络。 因为我的要求是3g可用,所以我必须上传少量数据。 当wifi可用时,必须上传整个数据。 因此,我必须检查连接是wifi还是3g。 请帮我。 提前致谢。 回答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
  • Check whether mobile is using WIFI or Data/3G
    Assuming that both WIFI and Data/3G are enabled on a device, how do I check if the user is currently using the internet over the wifi or the data plan assuming they are both enabled. So I don't need to check if they are enabled or disabled, I would like to detect which one is the user actually using. I've been doing the following, is this the only solution? WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); WifiInfo wifiInfo = wifiManager.getConnectionInfo(); if (WifiInfo.getDetailedStateOf(wifiInfo.getSupplicantState()) == NetworkInfo.DetailedState
  • wifi或3g网络状态更改时的BroadcastReceiver(BroadcastReceiver when wifi or 3g network state changed)
    问题 我有一个应用程序,每当手机连接到WiFi时,该应用程序都会更新数据库。 我已经实现了将运行Service的Service和BroadcastReceiver (它将告诉我正在使用哪个网络),但是问题是我不知道在manifest文件中添加什么内容以在网络状态更改或何时更改时启动BroadcastReceiver 。它连接到某种网络 回答1 你需要 <intent-filter> <action android:name="android.net.wifi.WIFI_STATE_CHANGED"/> <action android:name="android.net.wifi.STATE_CHANGE"/> </intent-filter> 在您的receiver标签中。 或者,如果您想对其进行更多控制,请在注册BroadcastReceiver之前进行以下设置: final IntentFilter filters = new IntentFilter(); filters.addAction("android.net.wifi.WIFI_STATE_CHANGED"); filters.addAction("android.net.wifi.STATE_CHANGE"); super.registerReceiver(yourReceiver, filters); WIFI
  • Android internet connectivity check problem
    I'm new to Android development and working on an Android application that requires the phone to be connected to the internet, through either Wifi, EDGE or 3G. This is the code that I'm using to check whether an internet connection is available public static boolean isConnected() { ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); return cm.getActiveNetworkInfo().isConnectedOrConnecting(); } I've also set these permissions in the manifest file <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android
  • Android中网络连接检查
    开发中我们时长需要进行网络连接的检查,比如连接是否畅通,网络是wifi还是移动数据流量。之前我们有说过对wifi的判断,但那个只能判断wifi,如果要判断整体网络不太符合。所以今天我们总体说一下网络连接的检查。 首先我们需要几个权限 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> 接着我们要获取到连接管理器,并获取NetworkInfo ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); NetworkInfo networkInfo = connectivityManager.getActiveNetworkInfo(); 最后我们通过NetworkInfo获取相关的一个网络情况。比如判断是不是wifi连接 if (networkInfo
  • ANDROID:如果WiFi已启用且处于活动状态,请启动一个意图(ANDROID: if WiFi is enabled AND active, launch an intent )
    问题 这就是我想做的: =>如果WiFi已启用且处于活动状态,请启动一个意图(实际上是获取其内容的WebView =>我的应用程序在网络上的说明) =>如果否,那么我将启动另一个意图,以便不显示带有“网页不可用...”的WebView。http://www.mywebsite.com上的网页可能暂时关闭,或者感动...” 我最初使用 如果(wifi.isWifiEnabled()) 但这并不表示Wifi连接是否处于活动状态。 它只说用户已打开开关。 设备可能已连接或可能未连接...这是正确的吗? 然后我尝试使用: 如果(wifi.getConnectionInfo()。getSSID()!= null) 但是我注意到,即使连接丢失或被禁用,它也会返回一个字符串...? 那我该怎么办? wifi = (WifiManager)getSystemService(Context.WIFI_SERVICE); Intent intent_instructions; if (wifi.getConnectionInfo().getSSID()!= null){ Log.i("Hub", "WiFi is enabled AND active !"); Log.i("Hub", "SSID = "+wifi.getConnectionInfo().getSSID()); intent
  • How to know the positioning mode is WIFI or 2G/3G cell tower in Android?
    We know there are two positioning mode in Android: GPS and network. If we use network, then Android can use WIFI or 2G/3G cell tower to position. Without GPS, we can simply use LocationManager.NETWORK_PROVIDER to get the location data. But how can we know the mode is WIFI or 2G/3G cell tower exactly? Android doesn't provide separate providers for WIFI and cell tower. I have thought a method. But I am not sure whether it is correct. Please review and give comments: Check whether I can get a WIFI hotspot list. If nothing in the list, cell tower must be used. If there are some WIFI hotspots, and
  • Android中如何知道定位模式是WIFI还是2G/3G基站?(How to know the positioning mode is WIFI or 2G/3G cell tower in Android?)
    问题 我们知道Android有两种定位模式:GPS和网络。 如果我们使用网络,那么Android可以使用WIFI或2G/3G基站进行定位。 如果没有 GPS,我们可以简单地使用 LocationManager.NETWORK_PROVIDER 来获取位置数据。 但是我们怎么知道具体是WIFI模式还是2G/3G基站呢? Android 不为 WIFI 和手机信号塔提供单独的提供商。 我想了一个方法。 但我不确定它是否正确。 请查看并发表评论: 检查我是否可以获得WIFI热点列表。 如果列表中没有任何内容,则必须使用手机信号塔。 如果有一些WIFI热点,并且精度高(<=100m),那么很有可能使用WIFI。 如果精度低,还使用蜂窝塔吗? 在我的理解中,WIFI定位的准确度是比较高的。 但是它的正常精度范围是多少? 另一个问题,Android是否同时使用WIFI和手机信号塔? 如果是这样,那么在我的应用程序中,我可以认为它使用 WIFI,而不是手机信号塔。 谢谢! 回答1 这是正确的,Android 没有明确给出确定网络位置如何计算的方法。 网络提供商的原则是收集设备上的所有相关数据,然后将其全部发送到 Google 服务器,在那里计算您的位置并将其发送回给您。 我不确定,但网络位置也可能使用加速度计/陀螺仪/罗盘数据来提高位置的准确性,尤其是当您连续计算位置时。
  • How to check whether a particular device supports 4G networks in Android?
    I want to check if a particular device has hardware support for 4G networks. I will elaborate the issue... In the application we have a settings page where user can make selection and allow application to run only in selected networks. Eg. User can select that app will run only in WiFi network or only in 3G network etc. There are CheckBox preferences for all networks WiFi, 2G, 3G 4G etc. Now if the device doesn't have the support for 4G network, I want to hide the 4G selection checkbox. All the remaining functionality is complete. I am struck on just this issue that how to detect if device
  • How to check network connection enable or disable in WIFI and 3G(data plan) in mobile?
    I am developing an android application,In my application,I want to check network connection,like i want to check network connection in wifi and 3G(like Indians mostly like data plan in mobile),how to check network in wifi and 3G.naybody knows,please give some idea about that. Thanks
  • 有了5G手机和套餐,如何正确使用5G网络?
    都是换了5G手机,办了5G套餐的人,结果万万没想到,别人的5G快到飞起,自己的5G却“不讲武德”?甚至更尴尬的是,完全不知道怎么用5G啊! 淡定!遇到事情不要慌,解决问题是关键。小燕教你7个操作,赶紧对号入座学起来,你也能用上优秀的5G网络。来吧,上干货! 01 正确安置卡槽,设置主卡 目前大多数双卡双待的5G手机支持的是“5G+4G”双卡双待,也就是若同时插入两张SIM卡,仅默认数据卡支持 5G 业务,非默认数据卡支持 4G / 3G / 2G 业务。所以,建议将5G卡放在正面卡槽,并作为主卡使用,且将主卡设为默认数据卡。 若手机有支持双5G,则可以双卡都使用5G网络。在不确定自己的5G手机是否支持双5G时,可以前往手机官网查看手机参数。 图片来自某手机官网截图 02 打开5G网络权限,始终保持使用5G网络 苹果手机:设置-蜂窝数据选项-语音与数据,选择【启用5G】 安卓手机:设置-无线与网络-移动数据-打开【启用5G】的开关 要注意的是,始终保持使用5G会带来较大的耗电量,所以如果想节省用电,则可以选下面操作三的4G/5G智能切换模式。 03 4G/5G智能切换模式 苹果手机:设置-蜂窝数据选择-语音与数据,选择【自动5G】,则手机会在5G速度不能提供明显更好的体验时,自动切换到4G。 安卓手机:设置-移动数据-高级-打开【5G省电模式】开关
  • Lollipop 5.0.2 中的 WIFI/3G/4G 位置返回 0.0(Location returns 0.0 with WIFI/3G/4G in Lollipop 5.0.2)
    问题 我试图根据WiFi/3G/4G连接获取位置,但它总是返回0.0作为latitude and longitude 。 如果相同的代码与GPS ON一起使用,那么它就可以工作,因此从 4.4 开始有些变化。 还尝试了以下链接,但它也不起作用。 http://www.androidhive.info/2015/02/android-location-api-using-google-play-services/ public class GPSTracker extends Service implements LocationListener { private static final String TAG = "GPSTracker"; private final Context mContext; boolean isGPSEnabled = false; boolean isNetworkEnabled = false; boolean canGetLocation = false; Location location; // location double latitude; // latitude double longitude; // longitude double speed; double altitude; double bearings; // The
  • 每个APP的android统计3g流量,如何?(android statistic 3g traffic for each APP, how?)
    问题 对于每个APP的统计网络流量,我现在使用的是Android TrafficStats 我可以得到如下结果: Youtube 50.30 MB Facebook的21.39 MBytes Google Play 103.38 MBytes (和更多...) 据我所知,“ Android Trafficstats”只是一个指向ac文件的本地指针。 (也许是.so吗?) 但是它混合了Wifi和3g流量,有什么方法只能获取非WiFi流量统计信息吗? 回答1 晚上,我有办法做到这一点... 首先,我必须创建一个扩展BroadcasrReceiver的类,如下所示: 清单定义: <receiver android:name=".core.CoreReceiver" android:enabled="true" android:exported="false"> <intent-filter> <action android:name="android.net.ConnectivityManager.CONNECTIVITY_ACTION" /> <action android:name="android.net.wifi.STATE_CHANGE" /> </intent-filter> </receiver> 代码: /** * @author me */ public class
  • 如何在Android应用程序中代替Wi-fi使用3G连接?(How to use 3G Connection in Android Application instead of Wi-fi?)
    问题 如何在Android应用程序中代替Wi-fi使用3G连接? 我想连接3G连接,是否有示例代码可连接到3G而不是Wi-fi? 回答1 T-Mobile的“我的帐户”应用会执行此操作,如果您已连接到WiFi连接,它将告诉您他们的程序无法通过WiFi运行,然后询问用户是否要关闭WiFi连接。如果您选择“否”,则应用程序退出;如果您选择“是”,则该应用程序将关闭您的WiFi连接,然后继续启动。 我认为这是一个很好的模式,它将确保您的应用程序不通过WiFi运行,并允许用户决定是否要关闭WiFi。 此模型的一个改进是当用户离开您的应用程序时重新打开wifi。 我尚未测试以下代码,但看起来应该可以工作(从此处修改) 在清单中使用以下权限 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> 这是一些打开/关闭WiFi的实际代码 private WifiManager wifiManager; @Override public void onCreate(Bundle icicle) {
  • 有没有一种方法可以检测Android使用哪个蜂窝网络?(Is there a way to detect which cellular network is used on Android?)
    问题 我的应用程序将提供实时视频流。 我想知道是否有一种方法可以检测用户的设备上是否有2G,3G或4G,以及当前连接属于哪个类别? 我的问题专门针对Android设备。 回答1 我不知道查询设备硬件功能(存在无线电的方法)的方法,但是如果您要询问如何检测当前的蜂窝数据连接类型,请查看TelephonyManager.getNetworkType(),其中“返回一个常数,该常数指示当前在设备上用于数据传输的无线电技术(网络类型)”。 我认为值NETWORK_TYPE_LTE和NETWORK_TYPE_HSPAP表示4G连接。 由于3G和4G之间的界线是模糊的,而且由于集旧技术被有效固定的(我们没有发明新的2G网络),更好的策略可能是识别网络技术是不够的,显示如果连接警告正在使用已知的慢速技术(例如EDGE)。 还请记住,仅网络技术并不一定等于一定的连接速度。 即使是4G连接,其运行速度也无法满足视频流的传输速度,具体取决于许多因素,其中一些因素是设备外部的因素(天气,信号强度,设备电池电量,手机信号塔处的可用带宽等)。 其他警告: 您应该首先检查活动的网络连接是否为蜂窝连接。 为此,请获取ConnectivityManager.getActiveNetworkInfo()并检查该对象的getType()。 这将指示活动网络是Wi-Fi还是蜂窝网络。 请记住,可能没有活动的网络
  • quota 磁盘配额管理
    quota 磁盘配额管理 1、磁盘配额的概念: quota磁盘配额功能只能在指定文件系统(分区)内有效,未设置配额的文件不收限制。 quota针对指定的用户账号、组账号进行限制,其他用户或组不收影响 磁盘配额可以进行两方面的限制:磁盘容量、文件数量。 磁盘容量:限制用户能够使用的磁盘数据块(block)大小,也就是限制磁盘空间大小, 默认单位为 KB。 文件数量:限制用户能够拥有的文件个数 软限制:指设定一个软性的配额数值(如 500MB 磁盘空间、200 个文件),在固定的宽限期(默 认为 7 天)内允许暂时超过这个限制,但系统会给出警告信息。 硬限制:指设定一个硬性的配额数值(如 1GB 磁盘空间、500 个文件),而且绝对禁止用户超 过该限值。硬限制的配额值应大于相应的软限制值,否则软限制值将失效。 设置磁盘配额 1、启用quoata磁盘配额 首先要通过修改配置文件“/etc/fstab”的方式启用 quota 磁盘配额。 [root@localhost var]# vim /etc/fstab /dev/sdb1 /data ext4 defaults,usrquota,grpquota 0 0 将该文件系统重新挂载 [root@localhost ~]# mount -o remount /data 执行 mount 命令查看已经挂载的文件系统,检查是否已经启用了