检查可用移动网络的正确方法是什么(无数据连接)

and*_*dev 15 android

检查Android上是否有移动网络(GSM)连接的正确方法是什么?(> 2.1)我不想检查移动网络上是否有可用的数据连接,只检查网络可用性.(检查是否可以通过移动网络拨打电话)

目前我正在使用以下检查:

public static boolean checkMobileNetworkAvailable(Context context){
    TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
    int networkType = tm.getNetworkType();
    return (networkType != TelephonyManager.NETWORK_TYPE_UNKNOWN);
}
Run Code Online (Sandbox Code Playgroud)

但似乎有些设备总是报告"NETWORK_TYPE_UNKNOWN".所以检查一直都失败了.

这样做有更好的方法吗?

更新:

以下方法会更好吗?

    public static boolean checkMobileNetworkAvailable(Context context){
       boolean isMobileNetworkAvailable = false;
       ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
       NetworkInfo[] networks = cm.getAllNetworkInfo();
       for(int i=0;i<networks.length;i++){
        if(networks[i].getType() == ConnectivityManager.TYPE_MOBILE){
              if(networks[i].isAvailable()){
                isMobileNetworkAvailable = true;
              }
            }
        }

    return isMobileNetworkAvailable;
}
Run Code Online (Sandbox Code Playgroud)

San*_*rab 8

我使用以下代码来了解我是否已连接到网络(没有移动数据):

    public static Boolean isMobileAvailable(Context appcontext) {       
    TelephonyManager tel = (TelephonyManager) appcontext.getSystemService(Context.TELEPHONY_SERVICE);       
    return ((tel.getNetworkOperator() != null && tel.getNetworkOperator().equals("")) ? false : true);      
}
Run Code Online (Sandbox Code Playgroud)

仅当手机实际注册到网络时,才会返回NetworkOperator.


Mar*_*son 1

看看我对Problem inDetecting Internet Connection in Android 的回答。

NETWORK_TYPE_UNKNOWN如果网络不可用或仍在连接,您可能会收到响应。