0

如何在android手机中检查网络是否连接..(网络意味着不是互联网连接或数据连接,其简单的移动网络如AIRTEL,CELLONE,VODAFONE等......)

我尝试使用 ConnectivityManager.TYPE_MOBILE 和 ConnectivityManager.TYPE_WIFI 但它们用于检查数据连接......而不是网络连接

4

5 回答 5

0

根据Android 文档

getSimOperator()

返回 SIM 提供商的 MCC+MNC(移动国家代码 + 移动网络代码)。

例如从 SIM 卡获取运营商 ID(MNC+MCC)

 public String getOperator()
       {
            TelephonyManager manager = (TelephonyManager) mGap.getSystemService(Context.TELEPHONY_SERVICE);
            String operatorName = manager.getSimOperator();
            return operatorName; 
       }
于 2013-11-11T11:54:51.913 回答
0

您可以使用TelephonyManager's getSimOperator()

于 2013-11-11T11:47:01.963 回答
0
public static boolean isNetworkAvailable(Activity activity) {
    ConnectivityManager connectivity = (ConnectivityManager) activity
            .getSystemService(Context.CONNECTIVITY_SERVICE);
    if (connectivity == null)
    {
        return false;
    } else {
        NetworkInfo[] info = connectivity.getAllNetworkInfo();
        if (info != null) {
            for (int i = 0; i < info.length; i++) {
                if (info[i].getState() == NetworkInfo.State.CONNECTED) 
                {
                    return true;
                }
            }
        }
    }
    return false;
}

您应该将此权限添加到清单文件

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
于 2013-11-11T11:49:48.397 回答
0

尝试这个 :

public class ConnectionDetector {
    private static Context _context;

    public ConnectionDetector(Context context){
        this._context = context;
    }

    public static boolean isConnectingToInternet(){ boolean haveConnectedWifi = false;
        boolean haveConnectedMobile = false;

        ConnectivityManager cm = (ConnectivityManager)_context.getSystemService(Context.CONNECTIVITY_SERVICE);
        NetworkInfo[] netInfo = cm.getAllNetworkInfo();
        for (NetworkInfo ni : netInfo) {
            if (ni.getTypeName().equalsIgnoreCase("WIFI"))
                if (ni.isConnected())
                    haveConnectedWifi = true;
            if (ni.getTypeName().equalsIgnoreCase("MOBILE"))
                if (ni.isConnected())
                    haveConnectedMobile = true;
        }
        return haveConnectedWifi || haveConnectedMobile;}

}

在清单文件中添加这些权限

<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
于 2017-09-19T06:55:37.163 回答
0

为了检查状态,有两种方法:

  1. ServiceState 常量:STATE_EMERGENCY_ONLY、STATE_IN_SERVICE、STATE_OUT_OF_SERVICE、STATE_POWER_OFF。

那些你通过调用得到的telephonyManager.serviceState.state。如果您想收听更改,请通过调用来使用 PhoneStateListener telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_SERVICE_STATE)。要取消注册,请致电telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE)

这是一个很好的解决方案,因为即使您没有 SIM 卡,有时(在某些国家/地区)您仍然可以拨打紧急电话号码,例如警察。

enum class PhoneServiceState {
    STATE_EMERGENCY_ONLY, STATE_IN_SERVICE, STATE_OUT_OF_SERVICE, STATE_POWER_OFF, UNKNOWN;

    companion object {
        fun getFromValue(value: Int): PhoneServiceState = when (value) {
            ServiceState.STATE_EMERGENCY_ONLY -> STATE_EMERGENCY_ONLY
            ServiceState.STATE_IN_SERVICE -> STATE_IN_SERVICE
            ServiceState.STATE_OUT_OF_SERVICE -> STATE_OUT_OF_SERVICE
            ServiceState.STATE_POWER_OFF -> STATE_POWER_OFF
            else -> UNKNOWN
        }
    }
}

用法:

PhoneServiceState.getFromValue(telephonyManager!!.serviceState.state)

如果是 STATE_OUT_OF_SERVICE 或 STATE_POWER_OFF,则表示您已完全断开连接。如果您有 STATE_EMERGENCY_ONLY,则表示您只能拨打紧急电话。

  1. 您可以使用subscriptionManager.activeSubscriptionInfoList. 如果您得到一个非空列表,我认为这意味着您已连接:

    fun hasCellConnection(context: Context): Boolean {
        val subscriptionManager = context.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE) as SubscriptionManager
        val activeSubscriptionInfoList = subscriptionManager.activeSubscriptionInfoList
        return !activeSubscriptionInfoList.isNullOrEmpty()
    }
    
于 2019-10-17T11:33:17.757 回答